Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I run xctest from the command-line with Xcode 5?

I found a command-line tool called "xctest" that apparently can run the unit tests in your project. This executable lives here:

/Applications/Xcode.app/Contents/Developer/usr/bin/xctest

When I try to run this executable on my xctest bundle, I'm using:

$ ./xctest /Users/myusername/Library/Developer/Xcode/DerivedData/MyApp-abcdefghijklmnop/Build/Products/Debug/MyAppTests.xctest

However, I get the following output:

Test Suite '(null)' started at 2013-11-14 21:16:45 +0000
Test Suite '(null)' finished at 2013-11-14 21:16:45 +0000.
Executed 0 tests, with 0 failures (0 unexpected) in 0.000 (0.001) seconds

There's no man page for xctest, as far as I can tell, but entering just ./xctest at the command-line yields:

Usage: xctest [--test Self | All | None | <TestCaseClassName/testMethodName>] <path of unit to be tested>

In particular, I'd like to be able to test just a particular method in a test class, which is why I'd like to use this xctest command.

I do see that there is a way to run all the tests from the command line like:

$ xcodebuild test -scheme MyApp

This runs all the unit tests and works properly (I see my unit test results, unlike when using xctest). But I'm interested in being able to run a single test method from the command-line, such as:

$ ./xctest --test MyAppTests/testExample  /Users/myusername/Library/Developer/Xcode/DerivedData/MyApp-abcdefghijklmnop/Build/Products/Debug/MyAppTests.xctest
like image 304
Chris Livdahl Avatar asked Nov 14 '13 21:11

Chris Livdahl


People also ask

How do I run XCTest in Xcode?

To run your app's XCTests on Test Lab devices, build it for testing on a Generic iOS Device: From the device dropdown at the top of your Xcode workspace window, select Generic iOS Device. In the macOS menu bar, select Product > Build For > Testing.

How do I run a single test in Xcode?

With a keyboard shortcutHit ^ ⌥ ⌘ U to run the tests for the cursor's context. If you are inside a test method, like in the example below, the context will be that method. If your cursor is in a test class, but outside a method, the context will be that test calls; all its tests will run.

What is XCTest in Xcode?

Use the XCTest framework to write unit tests for your Xcode projects that integrate seamlessly with Xcode's testing workflow. Tests assert that certain conditions are satisfied during code execution, and record test failures (with optional messages) if those conditions aren't satisfied.


1 Answers

Despite what the usage message says -XCTest is the argument you need:

xctest -XCTest MyAppTests/testExample testbundle.xctest

For a direct invocation of xctest to work you may also need to set DYLD_FRAMEWORK_PATH and DYLD_LIBRARY_PATH to your built products directory. In general you need to use the same arguments and environment as Xcode does, you can see this by putting a breakpoint in one of your tests, running them through Xcode, then printing out the values of arguments and environment for [NSProcessInfo processInfo].

To avoid messing with all that note you can also modify the scheme in Xcode to run only specific tests. Under Product > Scheme > Edit Scheme select the Test action and expand the test bundle. You can use the check boxes to select the tests to run and xcodebuild's test action will then run only these tests.

like image 116
Matt Stevens Avatar answered Sep 25 '22 05:09

Matt Stevens