ary*_*axt 12 unit-testing dependency-injection mocking objective-c
你如何单元测试Objective C代码?(苹果手机)
在其他语言(如java和.Net)中,您可以使用依赖注入,以便能够在当前代码中进行单元测试并传递模拟对象.但是,我找不到一个可靠的目标c依赖注入框架.
假设你想为下面的代码编写一个单元测试,你怎么能模拟MyObject?
- (void) methodToBeTested
{
NSString str = @"myString";
MyObject object = [[MyObject alloc] init];
[object setString:str];
[object doStuff];
[object release];
}
Run Code Online (Sandbox Code Playgroud)
这就是我如何通过依赖注入来做到这一点.是否有类似的方法来实现目标c?
@Inject MyObject object;
public void methodToBeTested()
{
String str = "myString";
// object is automatically instantiated (Dependency Injection)
object.setString(str);
object.doStuff();
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*nah 11
在目标c中,控制反转仍然是可行的.您当然可以设计基于构造函数或基于属性的依赖注入的类,但我认为您不会像以前那样找到基于注释的依赖注入框架.
[[ClassToBeTested alloc] initWithDependency:foo andOtherDepedency:bar];
ClassToBeTested *objectUnderTest = [[ClassToBeTested alloc] init];
objectUnderTest.dependency = foo;
objectUnderTest.otherDependency = bar;
Run Code Online (Sandbox Code Playgroud)
我已经看到了为objective-c构建依赖注入框架的几种不同方法,包括https://github.com/mivasi/Objective-IOC,但我无法评论它们的成熟度或实用性.
你怎么能模仿MyObject?
- (void) methodToBeTestedWithObject:(MyObject *)object
{
NSString str = @"myString";
[object setString:str];
[object doStuff];
}
Run Code Online (Sandbox Code Playgroud)
去测试:
- (void)testMethodToBeTested {
id mockMyObject = [OCMock mockForClass:[MyObject class]];
[[mockMyObject expect] setString:[OCMock any]];
[[mockMyObject expect] doStuff];
[objectToTest methodToBeTestedWithObject:mockMyObject];
[mockMyObject verify];
}
Run Code Online (Sandbox Code Playgroud)
正如@Jonah的回答中提到的那样,使用优秀的OCMock.不要费心去做资本-D,资本-I Dependency Injection in obj-c,它的工作量超过了它的价值.
| 归档时间: |
|
| 查看次数: |
7771 次 |
| 最近记录: |