Параметризованный тест iOS Kiwi, подобный NUnit

#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:

Есть один способ, который работает для меня.

В основном,

  1. Определите свой собственный блок в тестовом файле, который получает ваши параметры

     typedef void(^TestCount)(INT count);
      
  2. Создайте блок с соответствующими тестами

     TestCount testCount = ^(INT count){
       [[someObject shouldNot] beNil];
       [[someObject should] have:count] rows];
    };
      
  3. Выполняйте параметризованный блок везде, где вам это нужно, я обычно делаю это внутри этого блока

     context(@"when adding object", ^{
    
        beforeAll(^{
            [someObject addObject:anotherObject];
        });
    
    
        it(@"it should have 1 object", ^{
            testCount(1);
        });
    });
      

Я надеюсь, что это поможет