Unit testing with AppCode

Today we’ll talk about unit testing support in AppCode. We’ll assume that you already know how it works in Xcode, and that you’ve read our previous post about run configurations. Let’s focus more on the details of how it’s done in AppCode.

First, if you already have an Xcode project with configured unit tests in it, and you open it in AppCode, you need to create test run configurations: go to Run | Edit Configurations and add a OCUnit configuration.

Here you need to specify a class and methods to be run – note, that you can use code completion in these fields. If you leave the Class field blank, all tests in the target will be run. The rest of the options are similar to regular run configurations.

Now, when you want to run your tests, you can do it the same way you run your app – choose a configuration in the right upper corner of the IDE and click the green arrow button, or select it from the Run popup (Ctrl+Alt+R) invoked right from the editor.

When you run your tests, a dedicated tool window will appear at the bottom of the IDE showing you the progress and the results when ready.

Let’s take a moment to inspect the options that this tool window provides.
On the left vertical panel there are the two important options: rerun current configuration and stop.

You can find a number of options above the tests tree that can help you investigate the problems faster: hide successful tests, sort them alphabetically, navigate to previous/next failed test (which can also be done with shortcuts Alt+Cmd+Up/Alt+Cmd+Down) and export test results.

To find a test in the tree by name you can use speed search like in many other views – just start typing its name.

Under a gear-like icon you’ll find a number of settings allowing you to control the presentation of the tests in the view and enabling additional features e.g. statistics.

From this tool window you can easily navigate to the failing test code – simply click on the test in the tree. When you have fixed it, you don’t need to re-run the whole bunch of tests, you can re-run only this test in question: select the test and hit Ctrl+Shift+R (or choose it from the context menu).

You can also run a single test from the editor. Position the caret anywhere inside a test method and press Ctrl+Shift+R (Run [test name] from the context menu)to run this particular test. AppCode will create a temporary test run configuration which you can save and reuse later. You can also position the caret within a test class (but outside of the methods) and press Ctrl+Shift+R to run all tests in the class.

Now, in addition to all above, here’s a short FAQ.
If my project doesn’t have unit tests yet, how can I add them?
Currently you need Xcode to do that – can add Cocoa Unit Testing Bundle or Cocoa Touch Unit Testing Bundle target in Xcode. In AppCode you can add individual tests by generating them from Xcode template: in Project view hit Cmd+N and choose File from Xcode template.

Can I run tests on device?
Yes, you can – change the destination for test run configuration the same way as you do with normal run configurations.

Can I debug tests?
Yes, you can. Use Ctrl+Alt+D shortcut to debug instead of Ctrl+Alt+R.

How to run Kiwi tests?
The same way as OCUnit tests – configure Kiwi tests in Xcode, and create a test run configuration. You only need to remember to open *.xcworkspace project file not *.xcodeproj if you have added Kiwi tests via CocoaPods.

That’s about it!

This entry was posted in Tips'n'Tricks and tagged . Bookmark the permalink.

14 Responses to Unit testing with AppCode

  1. David Linsin says:

    You should also mention that you can navigate to a Test class by hitting Navigate -> Test Subject.

  2. Maria Khalusova says:

    true, thanks!

  3. William Zhao says:

    very good!

  4. Pritesh Shah says:

    I have an Xcode 5 project with a unit-testing target. As mentioned above, I went to Run | Edit Configurations and tried adding a OCUnit configuration. But, I see “No variants” in both the Target and Configuration drop downs (and they are disabled).

    Can you please help?

    • Pritesh Shah says:

      Nevermind, I found an open bug for this issue.


      • Andrew Velis says:

        @Pritesh Shash Could you possibly link that open bug. Your comment is pretty recent I am curious to track it.

        • Anton Makeev says:

          Andrew, here is the bug report. The problem is that AppCode 2.1 doesn’t support XCTest framework, but we are preparing AppCode 2.5 EAP that will be open in a week or two, and it will have full support of XCTest.

  5. Sean says:

    Note to anyone who had issues with proper syntax highlighting in kiwi:
    Make sure to pod install once you install kiwi. Effectively, you are doing a pod install twice.

  6. Lex Chou says:

    I’m using AppCode 3.0.4 and following the tutorial from https://www.youtube.com/watch?v=xIJ9GKK3rP4 to make a Google Test case on a Makefile project(generated by cmake),

    But stucked at creating a command line target, it prompts:

    Cannot create target: Not a directory

    What should I do now?

    • Alexey Utkin says:

      With AppCode 3.0.4 at 20th sec you cannot follow the video.
      Accelerator cmd+N does not work.
      You need to click the ‘+’ in the “Project Setting” dialog (frame
      It is in left-bottom corner of the dialog tab.

      • Lex Chou says:

        Actually that’s what I did.

        It prompts that error when I click “Finish” button in “Create New Target” dialog.

        • Alexey Utkin says:

          OK. Did you choose OS X | Application + Command Line Tool options?
          If yes, you may be have permission problem in project folder.

          • Lex Chou says:

            Yes I did choose OSX | Application + Command Line Tool option, I did exactly the same steps in the video tutorial.
            It’s not a permission issue, I confirmed by “chmod -R 777 project-folder” and tried again.
            is there any internal log I can provide for you?

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">