Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift XCTASERTEQUAL在为RxTest使用createColdObservable时失败_Swift_Rx Swift_Xctest_Rxtest - Fatal编程技术网

Swift XCTASERTEQUAL在为RxTest使用createColdObservable时失败

Swift XCTASERTEQUAL在为RxTest使用createColdObservable时失败,swift,rx-swift,xctest,rxtest,Swift,Rx Swift,Xctest,Rxtest,我的测试代码中有一个奇怪的问题。我想测试视图中的行为继电器,模型状态从变为。获取变为。保存。我有以下测试代码: class BankViewModelTests: XCTestCase { private var scheduler: TestScheduler! private var bag: DisposeBag! private var user: UserModel! override func setUpWithError() t

我的测试代码中有一个奇怪的问题。我想测试视图中的
行为继电器
,模型状态从
变为
。获取
变为
。保存
。我有以下测试代码:

class BankViewModelTests: XCTestCase {
    
    private var scheduler: TestScheduler!
    private var bag: DisposeBag!
    private var user: UserModel!
    

    override func setUpWithError() throws {
        try! super.setUpWithError()
        
        let url = Bundle(for: type(of: self)).url(forResource: "User", withExtension: "json")!
        let jsonData = try! Data(contentsOf: url)
        let jsonDict = try! JSONSerialization.jsonObject(with: jsonData, options: .allowFragments) as! JSONDictionary
        user = UserModel(jsonDict)!
        
        scheduler = TestScheduler(initialClock: 0)
        bag = DisposeBag()
    }

    override func tearDownWithError() throws {
        user = nil
        scheduler = nil
        bag = nil
        try! super.tearDownWithError()
    }
    
}

extension BankViewModelTests {
    func testSavingStatus() {
        // Arrange
        
        let sut = BankViewModel(user: user)
        
        let status = scheduler.createObserver(BankViewModel.Status.self)
        sut.status.bind(to: status).disposed(by: bag)
        
        // Action
        
        scheduler.createColdObservable([.next(10, ())]).bind(to: sut.tappedSubmit).disposed(by: bag)
        
        scheduler.start()
        
        // Assert
        
        XCTAssertEqual(status.events, [
            .next(0, .fetching),
            .next(10, .saving)
        ])
    }
    
}
我的
状态
枚举如下:

enum Status: Equatable {
    case fetching, fetchSuccess, saving, saveSuccess, failure(Error)

    public static func == (lhs: Status, rhs: Status) -> Bool {
        switch (lhs, rhs) {
        case (.fetching, .fetching),
             (.fetchSuccess, .fetchSuccess),
             (.saving, .saveSuccess),
             (.failure, .failure):
            return true
        default: return false
        }
    }
}
运行测试时,我收到以下消息:
xctasertequal失败:(“[next(fetching)@0,next(saving)@10]”不等于(“[next(fetching)@0,next(saving)@10]”


很明显,这些事件是等效的,那么为什么失败了呢?

我已经和你有过类似的问题

在我的情况下,覆盖BankViewModel.Status的Equalable使测试失败

请查收。在BankViewModel.Status层次结构中是否有覆盖性的机具均衡协议,并正确编辑


根据评论更新

枚举状态:可均衡{
案例获取,获取成功,保存,保存成功,失败(错误)
公共静态函数==(左:状态,右:状态)->Bool{
开关(左、右){
大小写(.fetching,.fetching),
(.fetchSuccess,.fetchSuccess),
(.saving、.saveSuccess),//Bool{
开关(左、右){
大小写(.fetching,.fetching),
(.fetchSuccess,.fetchSuccess),
(.保存,.保存),
(.saveSuccess、.saveSuccess),
(.失败,.失败):
返回真值
违约:
返回错误
}
}
}

我不太清楚你的意思。我已经编辑了我的问题并添加了
状态
的代码。我正在实现
Equatable
。我遗漏了什么吗?@Kex在你的实现Equatable中返回false if compare.saving=.savingtanks为你的答案。我遗漏了