Это правильный способ написать модульный тест для Interactor в VIPER, swift, iOS - PullRequest
2 голосов
/ 07 августа 2020

У меня есть небольшая функция сортировки в Interactor, которая берет набор String s, сортирует его и уведомляет Presenter. функция работает как положено.

Теперь я просто пытаюсь покрыть эту функцию модульным тестом . поэтому я создал Unit Test Class для своих Interactor и Mocked, Interactor Output и выполнил тест, как показано ниже. правильно ли я делаю?

введите описание изображения здесь

не следует ли нам заканчивать тест внутри testFunction, в данном случае внутри testSortFunction()

это вызывает notifySortedNames() в Mock Interactor Output Class, и я протестировал внутри него вариант использования. Я предполагаю, что это неправильный путь.

как я могу протестировать этот сценарий внутри testFunction(). надеюсь, ваша помощь с этим.

Interactor

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)
    }
}

Interactor Test Class

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])
    }
}

Спасибо !!

...