2012-06-12 30 views
1

有什么办法可以在多个OCUnit测试用例之间共享代码?也许我错过了一些明显的东西,但我一直没能做到这一点...如何在几个OCUnit测试用例之间共享代码?

我试图把通用代码放在另一个类中,但似乎你只能在实例方法中使用STAssertxxx宏从SenTestCase继承的类。考虑到这一点,我把这个通用代码放在一个从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类中,但我希望通用解决方案能够在多个测试用例之间共享代码,而不仅仅是在同一测试用例中的方法之间共享代码。

顺便说一句,我有一个类似的问题,使用猕猴桃。

回答

0

我觉得你的选择是:

  • 使用独立的辅助功能,而不是一个辅助类。或者,
  • 使用不同的断言机制,如OCHamcrest,并不限制您使用SenTestCase子类。

可以写定制断言宏类似于ST的,但它是一个痛苦(和我写OCHamcrest代替的原因之一)。

0

我的优选方法是使用功能/方法来生成数据,以测试(例如返回BOOL状态),不进行实际测试。

在某些情况下,我确实使用了宏函数 - 它直接解包到您的测试用例中,并没有任何限制。