За комментарий в шаблоне по умолчанию для XCTestCase
относительно setUp
:Какова цель метода setUp XCTestCase?
Put setup code here; it will be run once, before the first test case.
Однако в XCTestCase.h
, комментарий выше setUp
государств по-разному:
Setup method called before the invocation of each test method in the class.
Чтобы подтвердить фактическое поведение, Я положил NSLog
в пределах setUp
, чтобы подсчитать, сколько раз он был вызван:
static int count = 0;
- (void)setUp
{
[super setUp];
count++;
NSLog(@"Call Count = %d", count);
}
Это привело к методу setUp
вызывается перед каждым методом испытаний (подтверждающим комментарий на XCTestCase.h
).
Я хотел использовать метод setUp
для создания объектов тестирования/макета один раз (например, для установки тестового стека Core Data). Их создание снова и снова было бы интенсивным и потенциально очень медленным.
Так,
1) Что setUp
на самом деле предназначены для использования? Наверняка разработчики не создают в нем объекты снова и снова?
2) Как создать эти объекты только один раз в пределах XCTestCase
?
+1: Замечательный ответ! Да, думая об этом, * 1) заказ на проверку не гарантируется * (но при хороших тестах, не имеет значения, что происходит, когда) и * 2) тесты не должны влиять на то, что делают другие тесты * (as вы говорите, что они «не должны полагаться на какое-либо предыдущее тестовое состояние»). Хорошая идея со стеком 'in-memory'. Это именно то, что я буду делать. –
Прочитав этот ответ, я сразу же удалил мой +1;) Просто примечание: XCTest - это более или менее копия SenTest, наследующая все свои ограничения. Существуют гораздо лучшие рамки тестирования, которые имеют группы, которые могут быть произвольно вложены, где процедура _setup_ и _teardown_ очевидна. К сожалению, Xcode и XCTest далеко позади, и интеграция действительно классных сторонних модулей тестирования в захватывающий тестовый фрейм Xcode довольно сложна. – CouchDeveloper
@ JRG-Developer Правильно - тестовый заказ не гарантируется. @CouchDeveloper Например, [specta] (https://github.com/specta/specta) имеет методы 'beforeEach',' beforeAll', 'afterEach' и' afterAll'. –