[英]Objective C - Unit Testing & Mocking Objects?
你如何單元測試Objective C代碼? (蘋果手機)
在其他語言(如java和.Net)中,您可以使用依賴注入,以便能夠在當前代碼中進行單元測試並傳遞模擬對象。 但是,我找不到一個可靠的目標c依賴注入框架。
假設你想為下面的代碼編寫一個單元測試,你怎么能模擬MyObject?
- (void) methodToBeTested
{
NSString str = @"myString";
MyObject object = [[MyObject alloc] init];
[object setString:str];
[object doStuff];
[object release];
}
這就是我如何通過依賴注入來做到這一點。 是否有類似的方法來實現目標c?
@Inject MyObject object;
public void methodToBeTested()
{
String str = "myString";
// object is automatically instantiated (Dependency Injection)
object.setString(str);
object.doStuff();
}
在目標c中,控制反轉仍然是可行的。 您當然可以設計基於構造函數或基於屬性的依賴注入的類,但我認為您不會像以前那樣找到基於注釋的依賴注入框架。
[[ClassToBeTested alloc] initWithDependency:foo andOtherDepedency:bar];
ClassToBeTested *objectUnderTest = [[ClassToBeTested alloc] init];
objectUnderTest.dependency = foo;
objectUnderTest.otherDependency = bar;
我已經看到了為objective-c構建依賴注入框架的幾種不同方法,包括https://github.com/mivasi/Objective-IOC,但我不能評論它們的成熟度或實用性。
你怎么能模仿MyObject?
- (void) methodToBeTestedWithObject:(MyObject *)object
{
NSString str = @"myString";
[object setString:str];
[object doStuff];
}
去測試:
- (void)testMethodToBeTested {
id mockMyObject = [OCMock mockForClass:[MyObject class]];
[[mockMyObject expect] setString:[OCMock any]];
[[mockMyObject expect] doStuff];
[objectToTest methodToBeTestedWithObject:mockMyObject];
[mockMyObject verify];
}
正如@Jonah的回答中提到的那樣,使用優秀的OCMock 。 不要費心去做資本-D,資本-I Dependency Injection in obj-c,它的工作量超過了它的價值。
這是Objective-C的依賴注入框架: http : //www.typhoonframework.org
除了解決DI的設計方面外,它還非常注重能夠為生產與測試場景(集成測試)配置組件。 這包括:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.