2017-10-05 49 views
0

我有一个单元测试,需要访问我的应用程序目标导入的模块上的内部方法/属性。测试无法导入子依赖项 - @testable import SubModule - 使用未声明的类型'InternalSubModuleType'

E.g.

SubModule.swift

public class SubModuleType { 
    ... 
    internal let value: InternalSubModuleType 
    ... 
} 

AppViewController.swift

import SubModule 
// do things with SubModuleType 

AppViewControllerTests.swift

@testable import App 
@testable import SubModule 

func testWithSubModule() { 
    let internalSubModuleTypeInstance = SubModule.SubModuleType().value 
    // ... run a test dependent on internalSubModuleTypeInstance 
} 

在该试验中我接收InternalSubModuleType ' '' 未声明的类型的使用' 访问时.value

  • 我已经加入了SubModule目标App-Tests“目标相关”
  • 我为既为我编写测试方案的应用目标和子模块的目标设置为“启用可测性”为YES。

@testable import应该允许您访问在这些条件下标记为内部的类型。我不知道为什么我会收到此编译器错误。我仍然可以使用任何类型,这是通过使用@testable而不是我的SubModule目标在我的App目标中标记的内部类型。

你只允许1个目标是@testable import在测试目标或有什么我失踪?


使用Xcode中9,雨燕3.2

+0

我看到类似的东西(不完全一样) https://stackoverflow.com/questions/46600071/xcode-9-not-linking-indexing-correctly 你有没有尝试过的东西来强制索引发生并看看是否有任何机会解决它?这不是一个答案,只是看看是否存在关系。 –

+0

我试过退出Xcode,删除派生数据,重新打开和重新编译多次,它不起作用。当我删除它重新编入的派生数据时。然而,这看起来非常相似,不知道它是否是Xcode 9中的一个bug。这个项目上的设置虽然是新的(后Xcode 9版本),所以我没有什么可比较的。 –

+0

我试过以下改进了它。对于我来说,我怀疑问题的一部分是Xcode的工作方式与我想象的不同。 - 对App目标进行更改 - 保存每个源文件 - CMD-S - 生成应用程序 - 切换到单元测试目标 - 进行更改并保存文件。这似乎可以吸引应用程序的变化,但并不总是通俗易懂。它可能在后台缓慢索引(非常慢,这是一个小应用程序!) - 建立 - 这似乎整理任何挥之不去的错误信息 - 运行测试 正如你所说,我怀疑这个问题是不同的。 –

回答

0

重塑测试目标似乎已经完成了招我。

只需删除旧的测试目标,创建一个新目标并将此目标添加到您拥有的所有测试文件中。