<!--
{
  "availability" : [

  ],
  "documentType" : "symbol",
  "framework" : "XCTest",
  "identifier" : "/documentation/XCTest/XCTestObservation",
  "metadataVersion" : "0.1.0",
  "role" : "Protocol",
  "symbol" : {
    "kind" : "Protocol",
    "modules" : [
      "XCTest"
    ],
    "preciseIdentifier" : "c:objc(pl)XCTestObservation"
  },
  "title" : "XCTestObservation"
}
-->

# XCTestObservation

A protocol that defines methods the test runner calls in response to significant events during test runs.

```
protocol XCTestObservation : NSObjectProtocol
```

## Overview

The system calls the notification methods for [`XCTestObservation`](/documentation/XCTest/XCTestObservation) in the following sequence for a test bundle:

1. [`testBundleWillStart(_:)`](/documentation/XCTest/XCTestObservation/testBundleWillStart(_:)) — exactly once per test bundle
2. [`testSuiteWillStart(_:)`](/documentation/XCTest/XCTestObservation/testSuiteWillStart(_:)) — exactly once per test suite
3. [`testCaseWillStart(_:)`](/documentation/XCTest/XCTestObservation/testCaseWillStart(_:)) — exactly once per test case
4. [`testCase(_:didRecord:)`](/documentation/XCTest/XCTestObservation/testCase(_:didRecord:)-4cou6)  — for each test failure, zero or more times per test case at any point between test case start and finish
5. [`testCase(_:didRecord:)`](/documentation/XCTest/XCTestObservation/testCase(_:didRecord:)-8k955)  — for each expected test failure, zero or more times per test case at any point between test case start and finish
6. [`testCaseDidFinish(_:)`](/documentation/XCTest/XCTestObservation/testCaseDidFinish(_:)) — exactly once per test case
7. [`testSuite(_:didRecord:)`](/documentation/XCTest/XCTestObservation/testSuite(_:didRecord:)-3rk9k) — for each test failure, zero or more times per test suite at any point between test suite start and finish
8. [`testSuite(_:didRecord:)`](/documentation/XCTest/XCTestObservation/testSuite(_:didRecord:)-1xjkv) — for each expected test failure, zero or more times per test suite at any point between test suite start and finish
9. [`testSuiteDidFinish(_:)`](/documentation/XCTest/XCTestObservation/testSuiteDidFinish(_:)) — exactly once per test suite
10. [`testBundleDidFinish(_:)`](/documentation/XCTest/XCTestObservation/testBundleDidFinish(_:)) — exactly once per test bundle

See [`XCTestObservationCenter`](/documentation/XCTest/XCTestObservationCenter) for details about registering and removing test observers.

## Topics

### Observation Methods

[`testBundleWillStart(_:)`](/documentation/XCTest/XCTestObservation/testBundleWillStart(_:))

Notifies the observer immediately before any tests in a test bundle begin.

[`testSuiteWillStart(_:)`](/documentation/XCTest/XCTestObservation/testSuiteWillStart(_:))

Notifies the observer immediately before a test suite begins executing.

[`testCaseWillStart(_:)`](/documentation/XCTest/XCTestObservation/testCaseWillStart(_:))

Notifies the observer immediately before a test case begins executing.

[`testCase(_:didRecord:)`](/documentation/XCTest/XCTestObservation/testCase(_:didRecord:)-4cou6)

Notifies the observer when a test case reports an issue.

[`testCase(_:didRecord:)`](/documentation/XCTest/XCTestObservation/testCase(_:didRecord:)-8k955)

Notifies the observer when a test case records an expected failure.

[`testCase(_:didFailWithDescription:inFile:atLine:)`](/documentation/XCTest/XCTestObservation/testCase(_:didFailWithDescription:inFile:atLine:))

Notifies the observer when a test case reports a failure.

[`testCaseDidFinish(_:)`](/documentation/XCTest/XCTestObservation/testCaseDidFinish(_:))

Notifies the observer immediately after a test case finishes executing.

[`testSuite(_:didRecord:)`](/documentation/XCTest/XCTestObservation/testSuite(_:didRecord:)-3rk9k)

Notifies the observer when a test suite reports an issue.

[`testSuite(_:didRecord:)`](/documentation/XCTest/XCTestObservation/testSuite(_:didRecord:)-1xjkv)

Notifies the observer when a test suite records an expected failure.

[`testSuite(_:didFailWithDescription:inFile:atLine:)`](/documentation/XCTest/XCTestObservation/testSuite(_:didFailWithDescription:inFile:atLine:))

Notifies the observer when a test suite reports a failure.

[`testSuiteDidFinish(_:)`](/documentation/XCTest/XCTestObservation/testSuiteDidFinish(_:))

Notifies the observer immediately after a test suite finishes executing.

[`testBundleDidFinish(_:)`](/documentation/XCTest/XCTestObservation/testBundleDidFinish(_:))

Notifies the observer immediately after all tests in a test bundle finish executing.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)