Например, вот тестовый пример, который завершается неудачей:
Модель просмотра
Код: Выделить всё
final class DefaultSuccessViewModel: SuccessViewModel {
@LazyInjected private var navigator: DefaultNavigator
override func onUIEvent(_ event: SuccessViewIntent) {
if case .onMainTap = event { navigator.popToRoot() }
}
}
Код: Выделить всё
public class MockDefaultNavigator: DefaultNavigator {
public private(set) var popToRootCallsCount = 0
override public func popToRoot() {
popToRootCallsCount += 1
super.popToRoot()
}
}
Код: Выделить всё
class DefaultSuccessViewModelTests {
private let sut: DefaultSuccessViewModel
private let mockNavigator: MockDefaultNavigator
init() {
let mockNavigator = MockDefaultNavigator()
Resolver.main.register { mockNavigator as DefaultNavigator }
self.mockNavigator = mockNavigator
sut = DefaultSuccessViewModel()
}
@Test
func onUIEvent_onItemTap_popsToRoot() {
sut.onUIEvent(.onMainTap)
#expect(mockNavigator.popToRootCallsCount == 1)
}
}
Я подозреваю, что состояние MockDefaultNavigator (popToRootCallsCount) является общим для всех тестов .
Как изолировать MockDefaultNavigator между тестами, чтобы избежать общего состояния? Почему возникает эта проблема?
Подробнее здесь: https://stackoverflow.com/questions/792 ... unit-tests