3

我有一个小的排序功能,Interactor它需要一组Strings 并对其进行排序并通知Presenter. 该功能按预期工作。

现在我只是尝试用 unit test覆盖该功能。Unit Test Class所以我为我创建了一个Interactor并进行MockedInteractor Output如下测试。我做对了吗?

单元测试源代码的屏幕截图

我们不应该在里面结束测试吗testFunction,在这种情况下是在里面testSortFunction()

notifySortedNames()这在里面触发,Mock Interactor Output Class我在里面测试了用例。我想这是错误的方式。

我怎样才能在里面实现这个场景的测试testFunction()?感谢您对此的帮助。

交互者

class DetailInteractor: DetailInteractorInput {
    var output: DetailInteractorOutput?
    
    init(output: DetailInteractorOutput) {
        self.output = output
    }
    
    func sortNames(names: [String]) {
        
        let sorteNames = names.sorted(by: { $0 < $1 })
        output?.notifySortedNames(names: sorteNames)
    }
}

交互测试类

import XCTest
@testable import UnitTesst

class DetailInteractorTest: XCTestCase {
    
    var interactor: DetailInteractor!
    var output: DetailInteractorOutput!

    override func setUpWithError() throws {
       
        output = DetailInteractorOutputMock()
        interactor = DetailInteractor(output: output)
    }

    override func tearDownWithError() throws {
        
    }

    func testSortFunction() throws {
        
        let names = ["Japan", "France", "Australia"]
        interactor.sortNames(names: names)
    }

    func testPerformanceExample() throws {
        
        self.measure {
            
        }
    }
}

// Mock Test Classes
class DetailInteractorOutputMock: DetailInteractorOutput {
    
    func notifySortedNames(names: [String]) {
        
        let expected = ["Australia", "France", "Japan"]
        XCTAssertEqual(expected[0], names[0])
        XCTAssertEqual(expected[1], names[1])
        XCTAssertEqual(expected[2], names[2])
    }
}

谢谢!!

4

0 回答 0