Как лучше всего быстро издеваться над объектами в XCTest?

Как лучше всего быстро издеваться над объектами в XCTest? Это просто определение классов внутри функций с требуемой функциональностью? Или есть лучшие варианты?


person Danil    schedule 02.07.2014    source источник
comment
Можете ли вы предоставить дополнительную информацию о прецеденте? люди могут иметь в виду так много разных вещей, когда говорят «фиктивные объекты» — вы имеете в виду: (а) объекты, относительно которых вы можете установить ожидание и убедиться, что ожидание оправдалось? (b) зависимые объекты, для которых вы можете заглушить реализации методов и установить возвращаемое значение? (c) вообще тестировать двойников? возможно, немного больше контекста или пример помогут   -  person fqdn    schedule 02.07.2014
comment
все эти варианты (а, б, в)   -  person Danil    schedule 02.07.2014
comment
Я хотел бы видеть что-то вроде поддержки Mockito и OCMock. Возможность заглушить объект и протестировать оригинал, используя ожидаемое поведение объектов, к которым он прикасается, является ключевой.   -  person Ben Whiting    schedule 03.07.2014


Ответы (2)


Я рекомендую использовать Cuckoo, который похож на Mockito.

Примеры классов:

class ExampleObject {

    var number: Int = 0

    func evaluate(number: Int) -> Bool {
        return self.number == number
    }

}

class ExampleChecker {

    func check(object: ExampleObject) -> Bool {
        return object.evaluate(5)
    }

}

Пример теста:

@testable import App
import Cuckoo
import XCTest

class ExampleCheckerTests: XCTestCase {

    func testCheck() {
        // 1. Arrange
        let object = MockExampleObject().spy(on: ExampleObject())
        stub(object) { object in
            when(object.evaluate(any())).thenDoNothing()
        }
        let checker = ExampleChecker()

        // 2. Action
        checker.check(object)

        // 3. Assert
        _ = verify(object).number.get
        verify(object).evaluate(any())
        verifyNoMoreInteractions(object)
    }

}

Обратите внимание, что класс MockExampleObject создается автоматически с использованием пользовательского класса Run scriptBuild Phases), который упоминается в документации Cuckoo (в разделе установки).

person sundance    schedule 07.01.2018