gpt4 book ai didi

java - 什么时候避免 mock ?

转载 作者:行者123 更新时间:2023-11-29 09:42:11 25 4
gpt4 key购买 nike

模拟最常见的用例是

objA uses objB;
use objA without having objB populated/initialized

这样

@Mock
private UserInterface userInterface;

public void method() {
MockitoAnnotations.initMocks(this);
Client client;
client.setUserInterface(userInterface);
when(userInterface.getSomething()).thenReturn(new OutputType("f"));
client.doSomething();
}

但是如果我们实际上只需要 objA 的输出怎么办?假设我们不想调用返回 SomeOutput 的 objA.doSomething(); 来获取 SomeOutput,所以我们可以

  1. 为 doSomething() 模拟它以返回 SomeOutput; -- 没有多大意义

  2. new SomeOutput(bla, bla, bla); 填充一个变量,完全不模拟任何东西。

我问是因为我看到程序员在模拟第二种方式,这实际上没有意义,因为他们只是实例化 new SomeOutput(bla, bla, bla); 并通过模拟的 objA 返回它;

它有什么 secret 目的吗?我对模拟比较陌生。

最佳答案

当您想测试组件之间的交互时,模拟非常有用。

当您不关心交互,但您希望一个组件能够向另一个组件提供数据时, stub 和伪造是很好的选择。与使用模拟框架相比,最初创建这些最终可能需要更长的时间,但随后通常更容易编写进一步的测试。许多模拟框架还提供 stub 功能。

对于已经过测试的足够简单的类型(通常提供数据而不是服务),只需使用真实类型即可。

参见 Martin Fowler's articles on mocks and stubs以获得更多启发。

关于java - 什么时候避免 mock ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6842522/

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