Возможны обе стороны, но var 2 является предпочтительным. Для вар 1 решения рассмотрим следующий сценарий:
class State {
var val: Int = 0
}
class TestClass: XCTestCase {
let state = State()
func test1() {
state.val = 5
XCTAssertEqual(5, state.val)
}
func test2() {
XCTAssertEqual(0, state.val)
}
}
Таким образом, результат зависит от того, какой тест будет выполняться первым. Если test2
будет первым, то оба теста будут успешными. Другой способ, второй тест не удастся.
Для вар 2 раствора
class TestClass: XCTestCase {
func test1() {
let state = State()
state.val = 5
XCTAssertEqual(5, state.val)
}
func test2() {
let state = State()
XCTAssertEqual(0, state.val)
}
}
оба теста не преуспевает, независимо от того, что тест будет выполняться в первую очередь. Это делает предпочтительным решение в большинстве сценариев var 2.
Существует случай, когда вар 1 более удобно чем вар 2.Это когда SUT имеет много зависимостей, и вам нужно скопировать и вставить код создания для них в каждом тесте. Тогда вы можете объявить зависимости в качестве переменного класса, но необходимо использовать тест setUp
(и, возможно, tearDown
), чтобы убедиться, что их состояние обновляется перед каждым испытанием
class TestClass: XCTestCase {
var dep1: Dependency1!
var dep2: Dependency2!
var sut: SUT!
func setUp() {
dep1 = Dependency1()
dep2 = Dependency2()
sut = SUT(dep1, dep2)
}
}
Первого примера не компилируется, так как вы заявляете 'app' в качестве константы, а затем пытается изменить его значение в' setUp' –
@MaximKosov Спасибо, обновлено – Daniel