Как лучше всего быстро издеваться над объектами в XCTest? Это просто определение классов внутри функций с требуемой функциональностью? Или есть лучшие варианты?
Как лучше всего быстро издеваться над объектами в XCTest?
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 script
(в Build Phases
), который упоминается в документации Cuckoo
(в разделе установки).
person
sundance
schedule
07.01.2018
Вы можете создавать макеты протоколов и классов с помощью MockFive. Он регистрирует вызываемые методы и переданные аргументы и позволяет заглушать методы во время выполнения, поэтому вы можете просто написать один макет и настроить его для каждого теста. Я написал статью о том, как его использовать здесь< /а>.
person
Daniel Burbank
schedule
11.01.2016
Дэниел, добро пожаловать в стек. У вас есть несколько ответов на этот вопрос. Попробуйте удалить один. Есть ссылка на удаление. Хороший ответ на другой вопрос, где вы действительно это изложили. Старайтесь не ссылаться только на ответ, так как они удаляются или под ними появляются нежелательные комментарии.
- person Drew; 11.01.2016
Вы должны указать, что являетесь автором этой структуры.
- person idmean; 23.04.2017