我被困了几次我感到困惑。我有时会得到类似于以下的错误
无法转换'Foo!'类型的值预期的参数类型'Foo!
我搜索了SO,但还没有真正找到解释为什么Foo的东西!与Foo不一样!。
以下是一个例子:
{
$file = Storage::disks('local')->get($file);
// then test if $file exists
}
以下是生成错误的单元测试:
// FooViewModel.swift
class FooViewModel: BaseViewModel {
fileprivate var foo: Foo!
fileprivate var bar: Bar = Bar()
init!(model: Foo!) {
super.init()
foo = model
}
override init() {
super.init()
}
func setFooModel(_ model: Foo!) {
self.foo = model
}
func getFooModel() -> Foo! {
return self.foo
}
func getBar() -> Bar {
return bar
}
func getBlah() -> String {
return "Blah"
}
}
我尝试了import XCTest
@testable import WooHoo
class FooViewModelTests: XCTestCase {
override func setUp() {
super.setUp()
}
override func tearDown() {
super.tearDown()
}
func testGetBar() {
var foo = Foo()
let vm = FooViewModel()
// The following line generates the error
vm.setFooModel(foo)
XCTAssertEqual("Tell us your Foo for the Bar program.", vm.getBlah())
}
}
的多种变体无济于事,例如vm.setFooModel(foo)
或将foo声明为vm.setFooModel(foo!)
。
编辑: 请注意,上面的代码用于说明我遇到的问题,而不是操作代码。
答案 0 :(得分:3)
我想出来了。我的视图模型是测试目标的一部分。在我将其设置为仅运行目标后,问题已解决。 FYI。