Xcode 5:单元测试无法运行

11

我创建了几个测试用例,它们全部通过了...这是因为它们没有被运行。

从Xcode中,我看到:

测试套件“所有测试”开始于...
测试套件“所有测试”完成于...
共执行了0个测试,无失败(0意外),用时0.00秒

项目(和单元测试类)成功构建。

我所有的测试类都选择了MyApp_appTests作为Target Membership。生产类选择了MyApp_app和MyApp_appTests目标。

我验证了MyApp_appTests目标的构建设置(Bundle Loader和Test Host)。

Bundle Loader (Debug): $(BUILT_PRODUCTS_DIR)/MyApp.app/MyApp
Test Host (Debug): $(BUNDLE_LOADER)

我已经通过“目标构建阶段”的“链接二进制文件”导入了SenTestingKit.framework。

所有的测试都以-(void)testThat...开头。

我还查看了一些stackoverflow.com的问题:

stackoverflow.com/questions/8632254/xcode-4-2-cant-run-unit-test stackoverflow.com/questions/3608484/ocunit-tests-not-running-not-being-found stackoverflow.com/questions/16672616/ocunit-test-cases-not-running

还有这篇文章:

twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/

我不知道该去哪里寻找...非常感谢任何帮助!


在Xcode 5中,您无需导入SenTestingKit.framework。请查看WWDC-13有关Xcode 5单元测试的视频。 - zaph
如果我不这样做,就会出现构建错误(“OBJC_METACLASS$_SenTestCase”显示为armv7架构的未定义符号)。这是否揭示了我的项目中存在错误的配置? - invalidArgument
如果您使用Xcode 5模板创建测试环境,项目将包括一个测试目标和一个可工作(但失败)的测试。 - zaph
你指引了我正确的方向:包含的类使用XCTestCase而不是SenTest。更改框架使它对我起作用(也失败了!)。你知道为什么吗?SenTest框架已经被弃用了吗?请注意,如果您在答案中包含解释/评论,它将被接受,因为它帮助我解决了我的问题。感谢您的帮助! - invalidArgument
4个回答

23

对我有效的方法是在测试目标的构建设置中将“包装器扩展名”从“octest”更改为“xctest”

输入图像描述


1
这对我有用。在选择编辑->重构->转换为XCTest之后,我需要这样做。 - J.C.
在我的情况下,我没有重构现有的测试,我注意到所有的SenTests都被执行并显示在测试导航器中(Xcode 5.1),但是新的XCTestCase虽然在导航器中列出,但从未被调用 - 断点永远不会触发等。将包装器扩展名切换为“xctest”会触发在同一项目中运行两种类型的测试。 - Scott Heaberlin

5
Xcode 5现在使用XCTestCase而不是SenTest。苹果公司现在更直接地支持单元测试,包括他们自己的版本SenTest,名为XCTestCase。此外,界面得到了很大改进,允许运行单个测试,有一个测试导航器,不再创建.h测试文件。请注意,测试宏没有以XC前缀重命名。
请查看WWDC-13视频409:" Xcode 5中的测试"。
如果您使用Xcode 5模板创建测试环境,则项目将包括一个测试目标以及一个工作(和失败)的测试。

0
如果您正在Xcode 5+中创建一个新的测试目标,并计划使用SenTestKit进行单元测试,那么将测试目标的“Wrapper Extension”构建设置从默认值“xctest”更改为“octest”将有助于执行测试用例。

0

我在使用Xcode 7.3时遇到了这个问题,解决方法是先在设备上运行一次应用程序,然后再运行测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接