【发布时间】:2013-05-16 09:51:29
【问题描述】:
我正在为一个类Foo 编写单元测试,该类有一个协作者Bar。我想在Foo 的测试中使用Bar 的手动构建存根实现。
如果我在 Java 中执行此操作,我会给Foo 一个BarFactory 协作者,并在Foo 的测试中注入一个MockBarFactory,该测试总是返回我的StubBar。
我知道这种技术在 Objective-C 中可以很好地工作,但它并没有让我觉得它是在动态语言中做的特别惯用的事情。我想知道我是否可以做任何棘手的事情,导致[[Bar alloc] init] 在我运行单元测试时返回StubBar,但在“现实生活”中给我Bar 的正常实现。
或者在这种情况下最适合使用明显的工厂模式?
【问题讨论】:
-
我不会将单元测试代码与“现实生活”代码混为一谈,如果它们的行为不同,你怎么能确定你的测试是好的?
-
@JonathanCichon 我认为这在单元测试中很常见,不是吗?当你想测试一些特定的对象或功能时(比如本例中的
Foo),由于不同的原因,你不能总是设置一个完整的测试环境。也许Foo必须有一个与测试实际上无关的Bar属性。 -
正如我在下面评论的那样,如果它仅用于单元测试,我想避免添加编译到我的主要目标中的东西。
-
@DrummerB 在这种情况下,我需要
Bar的行为可预测,这样我就可以测试通过Foo的所有代码路径,这些路径取决于Bar的行为方式。
标签: objective-c unit-testing factory-pattern idioms ocmockito