gpt4 book ai didi

ios - OCMock 测试分配对象并调用方法

转载 作者:可可西里 更新时间:2023-11-01 06:10:21 25 4
gpt4 key购买 nike

我终于将一些 TDD 强加到我正在从事的项目中,并且遇到了边缘......我知道我想要的代码但不知道如何测试它:)

我正在寻找的实现是:

- (void) doSomething
{
FooBuilder *foo = [[FooBuilder alloc] init];
[foo doSomethingElseWithCompletionBlock:^{
[self somethingDone];
}];
}

所以我希望我的测试验证 a) 被测方法分配了一个新的 FooBuilder 和 b) 该方法然后调用新对象上的方法。

我该怎么做?我开始走上尝试模拟 alloc 类方法的道路,但很快就确定这条路是疯狂的。

请注意,我没有使用此测试来测试 FooBuilder 本身,只是存在协作。

最佳答案

通常情况下,依赖注入(inject)用于提供一个完整的对象,即“不要请求这个对象,在这里,使用这个”。但在这种情况下,我们希望能够实例化一个新对象。因此,我们所要做的就是注入(inject)类,而不是注入(inject)对象。 “与其创建一个特定的类,不如实例化其中一个。”

依赖注入(inject)有两种主要形式:“构造函数注入(inject)”(我将坚持使用术语“构造函数”,尽管 Objective-C 将其分为分配和初始化)和“属性注入(inject)”。

对于构造函数注入(inject),在初始化器中指定类:

- (instancetype)initWithFooBuilderClass:(Class)fooBuilderClass;

对于属性注入(inject),在属性中指定类:

@property (nonatomic, strong) Class fooBuilderClass;

构造函数注入(inject)更清晰,因为它使依赖关系变得明显。但是您可能更喜欢属性注入(inject)。有时我从一种方式开始,然后重构为另一种方式,从而改变主意。

无论哪种方式,您都可以拥有一个默认初始化程序,它可以调用 -initWithFooBuilderClass: 或将属性设置为 [FooBuilderClass class]

然后 doSomething 会像这样开始:

- (void)doSomething
{
id foo = [[self.fooBuilderClass alloc] init];
...

关于ios - OCMock 测试分配对象并调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17916066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com