lis*_*sak 1 java unit-testing mocking
模拟的最常见用例是
objA uses objB;
use objA without having objB populated/initialized
Run Code Online (Sandbox Code Playgroud)
以便
@Mock
private UserInterface userInterface;
public void method() {
MockitoAnnotations.initMocks(this);
Client client;
client.setUserInterface(userInterface);
when(userInterface.getSomething()).thenReturn(new OutputType("f"));
client.doSomething();
}
Run Code Online (Sandbox Code Playgroud)
但是如果我们实际上只需要objA的OUTPUT呢?假设我们不想调用objA.doSomething();那个返回SomeOutput来获取SomeOutput,所以我们可以
为doSomething()模拟它以返回SomeOutput; - 没有多大意义
填充变量,new SomeOutput(bla, bla, bla);而不是嘲笑任何东西.
我问,因为我看到程序员嘲笑第二种方式,实际上没有意义,因为他们只是实例化new SomeOutput(bla, bla, bla);并通过模拟的objA返回它;
它有任何秘密目的吗?我对嘲笑比较陌生.
Jon*_*eet 12
当您想要测试组件之间的交互时,模拟是很好的.
当您不关心交互时,存根和假货很棒,但您希望一个组件能够向另一个组件提供数据.与使用模拟框架相比,这些最终可能需要更长时间才能创建,但随后编写更多测试通常会更容易.许多模拟框架也提供了存根功能.
对于已经过测试的足够简单的类型(通常提供数据而不是服务),只需使用真实类型.
请参阅Martin Fowler关于模拟和存根的文章,以获得更多启示.
| 归档时间: |
|
| 查看次数: |
396 次 |
| 最近记录: |