#ios #unit-testing #tdd #kiwi
#iOS #модульное тестирование #tdd #kiwi
Вопрос:
Есть ли способ параметризовать тест с помощью Kiwi?
Если вы знакомы с NUnit, в нем есть функция запуска теста с параметрами (см. http://www.nunit.org/index.php?p=testCaseamp;r=2.5 ).
Ответ №1:
В итоге я создал макрос, который генерирует if (…, ^{ });
Это покажет правильное сообщение об ошибке, если тест не удался, но вы не можете выполнить отладку 🙁 .
Вот пример того, как это выглядит:
let(_userModel, ^id{
return [[MyUserModel alloc] init];
});
#define email_should_be_valid(email)
it(@ #email " should be valid", ^{
[_userModel setEmail:email];
[[theValue([_userModel validate:nil]) should] beTrue];
});
email_should_be_valid(@"example@dd.m")
email_should_be_valid(@"example.example@dd.x")
email_should_be_valid(@"example@dd.com")
#undef email_should_be_valid
Я не буду отмечать этот ответ как правильный, надеюсь, что кто-нибудь предложит лучшее решение для этого.
Ответ №2:
Есть один способ, который работает для меня.
В основном,
-
Определите свой собственный блок в тестовом файле, который получает ваши параметры
typedef void(^TestCount)(INT count);
-
Создайте блок с соответствующими тестами
TestCount testCount = ^(INT count){ [[someObject shouldNot] beNil]; [[someObject should] have:count] rows]; };
-
Выполняйте параметризованный блок везде, где вам это нужно, я обычно делаю это внутри этого блока
context(@"when adding object", ^{ beforeAll(^{ [someObject addObject:anotherObject]; }); it(@"it should have 1 object", ^{ testCount(1); }); });
Я надеюсь, что это поможет