2012-06-12 75 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狀態),不進行實際測試。

在某些情況下,我確實使用了宏函數 - 它直接解包到您的測試用例中,並沒有任何限制。

相關問題