Xcode - 测试类文件是模块的一部分,忽略导入

Nun*_*ves 41 xcode ios

所以我有一个带有测试的iOS项目,一切正常.

我觉得有必要改变项目名称.我按照苹果公司的文件指示,选择了项目并更改了名称.

经过一段时间的更新,最终工作,应用程序运行正常,但我仍然有问题.

由于这个恼人的问题,我无法运行测试.我确定这是一个基本的东西,但我仍然无法弄明白.

这是我的测试类(为了问题,我正在使用一个Foo例子)

@testable import MyApp // File FooTests is part of module MyApp. Ignoring import.

class FooTests: QuickSpec {

  override func spec() {

     describe("a foo test") {
         it("tests foo") {
             let return = Foo.barMethod()
             XCTAssertEqual(return, "expected", "Expected something, got \(return) instead")
         }
    }
 }
Run Code Online (Sandbox Code Playgroud)

Foo班是不被认可的,我得到的是,测试类是部分的错误MyApp是不是这样的.

我应该在哪里寻找?

小智 69

我只是偶然发现了同样的问题,你的帖子很有帮助.我发现的是通过更改Product Nameto AppNameTests,根据您的示例,然后产品模块名称被正确反映,您不必Tests在末尾添加$(PRODUCT_NAME:c99extidentifier).c99extidentifier似乎是指Product Name.

摘要:

  • 在Project中选择您的测试目标
  • 导航 Build Settings -> Packaging
  • 更改Product Name为您之前的测试目标,可能会附加Tests
  • 我相信根据Apple重命名项目的重命名不包括更新模块@testable,所以我不得不手动执行此操作

  • 而不是手动更改"产品名称"和附加"测试",只需将"产品名称"设置回"$(TARGET_NAME)".我已经测试了Xcode 8 beta 2,现在重命名该项目解决了这个问题. (4认同)

Nun*_*ves 8

[UPTADE]这帮助Jean-Frederic找出答案.这就是我接受它的原因.

我终于设法解决了这个问题,但我对解决方案不满意.

考虑我的应用名称 AppName

由于一些奇怪的原因,我无法解释,我的测试目标Build Settings -> Product Module Name$(PRODUCT_NAME:c99extidentifier)哪个值Appname,而不是AppNameTests.我检查了其他项目,并且值是相同的,但转换为AppNameTests所以在这种情况下,我不知道我能做什么使它自动更新并在名称中包含测试部分.

我最终做的是将名称设置为$(PRODUCT_NAME:c99extidentifier)Tests.不确定这是否是一个合适的解决方案,但现在它的工作原理.

如果有人有更好的解决方案,请随时分享.