2012-06-12 1 views
1

Есть ли способ обмена кодом между несколькими тестовыми примерами OCUnit? Может быть, мне не хватает чего-то очевидного, но я не смог это сделать ...Как поделиться кодом между несколькими тестовыми примерами OCUnit?

Я попытался поместить общий код в другой класс, но, похоже, вы можете использовать только макросы STAssertxxx внутри методов экземпляра классы, наследуемые от SenTestCase. Принимая это во внимание, я поместил этот общий код в singleton, наследующий от SentTestCase, без тестовых методов, но это, похоже, нарушает некоторые внутренние предположения OCUnit, так как я не получаю ошибок от неудавшихся тестов в общем коде.

Мой текущий код (не работает) выглядит следующим образом:

@interface TestHelper : SenTestCase 
+ (TestHelper *)sharedHelper; 
- (void)assertSomething:(id)object; 
@end 

@implementation TestHelper 
+ (TestHelper *)sharedHelper 
{ 
    // Typical singleton magic 
} 

- (void)assertSomething:(id)object 
{ 
    STAssertWhateverOnObject(object, ...); 
} 
@end 



@interface RealTestCase : SenTestCase 
- (void)testWhatever; 
- (void)testAnotherThing; 
@end 

@implementation RealTestCase 
- (void)testWhatever 
{ 
    [[TestHelper sharedHelper] assertSomething:someObject]; 
    STAssertOtherThings(someObject, ...); 
} 

- (void)testAnotherThing 
{ 
    [[TestHelper sharedHelper] assertSomething:someSimilarObject]; 
    STAssertSomeOtherThings(someSimilarObject, ...); 
} 
@end 

Пожалуйста, обратите внимание, что это простой пример. В этом случае я мог бы поместить весь код в класс RealTestCase, но я хотел бы, чтобы общее решение для совместного использования кода среди нескольких тестовых примеров не только среди методов в одном тестовом случае.

Кстати, у меня есть аналогичная проблема с использованием Kiwi.

ответ

0

Я думаю, что ваш выбор:

  • Используйте автономные вспомогательные функции, а не вспомогательный класс. Или,
  • Используйте другой механизм утверждения, такой как OCHamcrest, который не ограничивает вас подклассами SenTestCase.

Вы можете записи пользовательских Утверждающие макросы, аналогичные ST, но это боль (и одна из причин, я написал OCHamcrest вместо).

0

Мой предпочтительный способ - использовать функции/методы для генерации данных для проверки (например, возврата BOOL), а не для фактических тестов.

В некоторых случаях я использовал функции макросов - он распаковывается непосредственно в ваш тестовый пример и не имеет каких-либо ограничений.