我有一个库存标准类调用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__)
}
Run Code Online (Sandbox Code Playgroud)
编译器在上面突出显示的行上失败.编译器错误是使用未解析的标识符GeorRssParserDelegate
该类确实存在并且与产品本身一起构建.有什么需要特别的吗?
Jam*_*ard 53
您必须将应用程序的模块导入到单元测试中.这通常是您的应用名称.例如,如果你的应用程序名称是GeoRssParser该import声明将是:
import GeoRssParser
Run Code Online (Sandbox Code Playgroud)
Tun*_*Fam 22
适用于我的Xcode 8/9解决方案:
@testable import Product_Module_Name
Run Code Online (Sandbox Code Playgroud)
注意:不是目标名称,而是产品名称.
关于上述答案:无需制作@testable将需要公开改变应用程序架构设计的类和方法.如果您不想更好地更改它以使用此解决方案,那么您将不需要对类公开或不更改.
非常感谢这个答案
Sop*_*ert 19
如果您正在测试的类被编译到另一个目标(例如您的应用程序,而不是测试包),请确保标记您尝试使用的类或结构public- 默认访问可见性不会允许跨目标测试.
Luk*_*ski 13
如果您使用全新的XCode 7(截至2015年7月21日),只需写下:
@testable import GeoRssParserDelegate
资料来源:http://natashatherobot.com/swift-2-xcode-7-unit-testing-access/
@testable import MyApp
Run Code Online (Sandbox Code Playgroud)
重要的!注意: MyApp 必须是你项目中的产品模块名称(Settings -> Target -> Build Setting -> Product Module Name)
| 归档时间: |
|
| 查看次数: |
14820 次 |
| 最近记录: |