单元测试找不到要测试的类

时间:2014-06-13 19:33:58

标签: swift

我有一个需要测试的股票标准类调用GeoRssParserDelegate。

在我的快速单元测试中,我得到了这个:

func testParser()
{
    var bundle = NSBundle(forClass:GeoRssParserTest.classForKeyedArchiver())
    var path = bundle.pathForResource("test", ofType: "xml")
    let data = NSData.dataWithContentsOfFile(path, options: NSDataReadingOptions.DataReadingMapped, error: nil)
    let xmlParser = NSXMLParser(data:data)
    let delegate = GeoRssParserDelegate() <-- Compiler fails here
    var bStatus = xmlParser.parse()
    XCTAssertTrue(bStatus, "Parse failed", file: __FILE__, line: __LINE__)        
}

编译器在上面突出显示的行上失败。编译器错误是使用未解析的标识符GeorRssParserDelegate

此类确实存在并使用产品本身构建。有什么需要特别的吗?

8 个答案:

答案 0 :(得分:51)

您必须将应用程序的模块导入到单元测试中。这通常是您的应用名称。例如,如果您的应用名称为GeoRssParser,则import语句为:

import GeoRssParser

答案 1 :(得分:20)

适用于我的 Xcode 8/9 解决方案:

@testable import Product_Module_Name

注意:不是目标名称,而是产品名称。

关于上述答案:如果没有@testable,则需要公开改变应用程序架构设计的类和方法。如果您不想更好地更改它以使用此解决方案,那么您将不需要对类公开或不更改。

非常感谢answer

答案 2 :(得分:18)

如果您正在测试的类被编译到另一个目标(例如您的应用程序,而不是测试包),请确保您尝试使用的类或结构标记为{{ 1}} - 默认访问可见性不允许进行跨目标测试。

答案 3 :(得分:12)

如果你正在使用全新的XCode 7(截至2015年7月21日),只需写下: @testable import GeoRssParserDelegate

来源:http://natashatherobot.com/swift-2-xcode-7-unit-testing-access/

答案 4 :(得分:2)

只需将您要测试的课程添加到目标 - &gt;构建阶段 - &gt;编译来源

这是我解决问题的方法。

答案 5 :(得分:0)

执行以下3个步骤 - &gt;  1.编写@testable导入Your_Project_name  2.然后保存(CTRL + S)  3.然后构建(CTRL + B)

答案 6 :(得分:0)

@testable import MyApp

重要!注意: MyApp必须是项目中的产品模块名称(设置->目标->构建设置->产品模块名称)

答案 7 :(得分:0)

对我来说,我要测试的引用或值类型未标记为public。这就是为什么我只是用作关联类型的复制粘贴。