无法使用参数列表 ((ErrorType)、XMPPError) 调用 'XCTAssertEqual'
Cannot invoke 'XCTAssertEqual' with an argument list ((ErrorType), XMPPError)
在 MyModule 中,我有这个枚举:
enum MyError: ErrorType {
case failToSendMessage
case notAuthenticated
case noResponseReceived
}
在 MyModuleTests 中:
import XCTest
@testable import MyModule
class MyModuleTests: XCTestCase {
func testNotAuthenticated() {
myClass.doSomething()
.subscribeError { error in
XCTAssertEqual(error, MyError.notAuthenticated)
}
}
}
doSomething
returns 一个 Observable
.
为什么我会收到此错误消息:
Cannot invoke 'XCTAssertEqual' with an argument list ((ErrorType), MyError)
?
正如错误提示的那样,您在这里尝试使用 XCTAssertEqual
将 (ErrorType)
与 MyError
进行比较
1.Check 为什么你得到的错误是 (ErrorType)
而不是 ErrorType
2.Try 将(类型转换)ErrorType
转换为 MyError
后比较错误。
原来,ErrorType是不能直接比较的:
XCTAssertEqual(error, MyError.notAuthenticated as ErrorType)
// Cannot invoke 'XCTAssertEqual' with an argument list ((ErrorType), ErrorType)
XCTAssert(error == (MyError.notAuthenticated as ErrorType))
// Binary operator '==' cannot be applied to two 'ErrorType' operands
为了完成同样的事情,我这样做了:
switch error {
case MyError.notAuthenticated:
()
default:
XCTFail()
}
您应该为您的 MyError 添加符合 Equatable 的扩展。
extension MyError: Equatable
{
static func == (lhs: MyError, rhs: MyError) -> Bool {
switch (lhs, rhs) {
case (.failToSendMessage, .failToSendMessage):
return true;
case (.notAuthenticated, .notAuthenticated):
return true;
case (.noResponseReceived, .noResponseReceived):
return true;
default:
return false;
}
}
}
然后,断言您的错误非常简单。
if let error = result.error {
XCTAssertTrue(error == MyError.notAuthenticated,"API returns 403");
} else {
XCTFail("Response was not an error");
}
我.
在 MyModule 中,我有这个枚举:
enum MyError: ErrorType {
case failToSendMessage
case notAuthenticated
case noResponseReceived
}
在 MyModuleTests 中:
import XCTest
@testable import MyModule
class MyModuleTests: XCTestCase {
func testNotAuthenticated() {
myClass.doSomething()
.subscribeError { error in
XCTAssertEqual(error, MyError.notAuthenticated)
}
}
}
doSomething
returns 一个 Observable
.
为什么我会收到此错误消息:
Cannot invoke 'XCTAssertEqual' with an argument list ((ErrorType), MyError)
?
正如错误提示的那样,您在这里尝试使用 XCTAssertEqual
(ErrorType)
与 MyError
进行比较
1.Check 为什么你得到的错误是 (ErrorType)
而不是 ErrorType
2.Try 将(类型转换)ErrorType
转换为 MyError
后比较错误。
原来,ErrorType是不能直接比较的:
XCTAssertEqual(error, MyError.notAuthenticated as ErrorType)
// Cannot invoke 'XCTAssertEqual' with an argument list ((ErrorType), ErrorType)
XCTAssert(error == (MyError.notAuthenticated as ErrorType))
// Binary operator '==' cannot be applied to two 'ErrorType' operands
为了完成同样的事情,我这样做了:
switch error {
case MyError.notAuthenticated:
()
default:
XCTFail()
}
您应该为您的 MyError 添加符合 Equatable 的扩展。
extension MyError: Equatable
{
static func == (lhs: MyError, rhs: MyError) -> Bool {
switch (lhs, rhs) {
case (.failToSendMessage, .failToSendMessage):
return true;
case (.notAuthenticated, .notAuthenticated):
return true;
case (.noResponseReceived, .noResponseReceived):
return true;
default:
return false;
}
}
}
然后,断言您的错误非常简单。
if let error = result.error {
XCTAssertTrue(error == MyError.notAuthenticated,"API returns 403");
} else {
XCTFail("Response was not an error");
}
我.