如何在几个OCUnit测试用例之间共享代码?

时间:2012-06-12 09:20:45

标签: ios unit-testing testing refactoring ocunit

有没有办法在几个OCUnit测试用例之间共享代码?也许我错过了一些明显的东西,但我无法做到......

我试图将公共代码放在另一个类中,但似乎只能在继承自SenTestCase的类的实例方法中使用STAssertxxx宏。考虑到这一点,我把这个公共代码放在一个继承自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时遇到了类似的问题。

2 个答案:

答案 0 :(得分:0)

我认为您的选择是:

  • 使用独立的帮助程序函数,而不是帮助程序类。或者,
  • 使用不同的OCHamcrest断言机制,不会限制您使用SenTestCase子类。

可以编写类似于ST的自定义断言宏,但这很痛苦(而且是我编写OCHamcrest的部分原因)。

答案 1 :(得分:0)

我首选的方法是使用函数/方法生成要测试的数据(例如返回BOOL条件),而不是进行实际测试。

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