我正在尝试使用公共结构
public struct Person {
public let name: String
}
Run Code Online (Sandbox Code Playgroud)
在单元测试中(XCTest):
let person = Person(name: "Paul")
Run Code Online (Sandbox Code Playgroud)
测试构建失败,错误:
无法构造"Person",因为它没有可访问的初始值设定项.
为了构建测试,我需要为struct编写初始化器.感觉不对,因为结构已经有初始化器.有没有人有更好的解决方案?
Xcode版本6.1.1(6A2008a)
jrt*_*ton 43
问题是您使用结构获得的自动合成初始化程序被合成为internal,这意味着它无法从另一个模块访问.
您的单元测试当前在另一个模块中运行,因此无法看到初始化程序.正如Ben-G在他的回答中指出的那样,这个问题在Swift 2.0中得到了解决@testable.
这是Swift项目中单元测试普遍破坏的一部分.单元测试模块应具有对app模块的特殊访问权限,否则您必须添加大量的访问控制行李.
从文档:
结构类型的默认成员初始值设定项
如果结构的任何存储属性是私有的,则结构类型的默认成员初始值设定项将被视为私有.否则,初始化程序具有内部访问级别.
与上面的默认初始化程序一样,如果希望在另一个模块中使用成员初始化程序时可以初始化公共结构类型,则必须自己提供公共成员初始化程序作为类型定义的一部分.
| 归档时间: |
|
| 查看次数: |
4348 次 |
| 最近记录: |