我有一个需要测试的股票标准类调用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
此类确实存在并使用产品本身构建。有什么需要特别的吗?
答案 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
。这就是为什么我只是用作关联类型的复制粘贴。