emenegro
emenegro

Reputation: 6971

Disable assertions while testing

I want to test the contract of my API so if, for example, an object is created with some parameter to nil an assertion is raised, but if the assertions are disabled (Release config) it simply returns nil.

My test scheme has the build configuration to Debug, so in my API contract tests I check if the creation of an object with some parameters to nil returns a nil object. But the assertion of the constructor is raised before the XCTAssertNil is executed, so my test always fails.

Can I disable the assertions while testing? I tried to add NS_BLOCK_ASSERTIONS to the scheme arguments passed on launch but that doesn't work.

Upvotes: 14

Views: 8050

Answers (2)

Axel Guilmin
Axel Guilmin

Reputation: 11764

As explained in your self-answer, it is useful to create a configuration dedicated to unit testing

In Objective-C you'll need to play with NS_BLOCK_ASSERTIONS and the more recent ENABLE_NS_ASSERTIONS indeed.

For Swift assertions, I found out from Apple Developer it depends on the compiler optimization level you chosed.

With -Onone the assertions will be triggered, but not with -O

SWIFT_OPTIMIZATION_LEVEL

Upvotes: 1

emenegro
emenegro

Reputation: 6971

Solved, I added a new configuration, duplicated from Debug, called Test.

enter image description here

Then added NS_BLOCK_ASSERTIONS=1 in the build settings preprocessor macros.

enter image description here

Finally, change the test action in the test's scheme.

enter image description here

Now it works :)

Upvotes: 18

Related Questions