【发布时间】:2017-11-28 11:01:33
【问题描述】:
我正在使用 Mockito 测试我的代码,并且我已经使用过:
RequestWrapper requestWrapper = mock(RequestWrapper.class);
我认为它模拟了 RequestWrapper.class 的 requestWrapper 实例。
相反,当在被测系统的代码中我调试这个:
RequestWrapper a = new RequestWrapper(request);
RequestWrapper b = new RequestWrapper(request);
RequestWrapper c = new RequestWrapper(request);
我发现 RequestWrapper 的 a, b, c 实例都被模拟了。 因此,Mocked 类的实例名称(我发现不是模拟的 Object!)似乎根本不重要。
所以,我的问题是:
- 如果当您使用 Mockito.mock() 时,同一类的所有实例都被同等地模拟,那么模拟一个类的实例(定义一个特定的实例名称)有什么意义?
- 另一个问题是,如果我想定义我的模拟实例的不同行为,我是否必须在测试中声明实例的正确名称,以便使用 when() 定义不同的行为。那么()?
编辑:更新
对不起,我错了。只有显式模拟的实例才会成为模拟。其他是真实类的对象。由于真实类中的所有其他模拟依赖项,我也错了。
因此,如果我模拟一个类的实例,则该类的所有其他实例都被实例化为模拟,这不是真的。它们是真实类的对象。
感谢您提供有用的答案,我为错误道歉。
【问题讨论】:
-
我注意到你的问题仍然是“开放的”——因为你没有接受答案。请查看并决定是否要accept 回答。或者让我知道我是否可以做些什么来增强我的输入以使其被接受。接受有助于未来的读者确定问题是否已解决,并对花时间回答你的人表示感谢。谢谢!
标签: java unit-testing junit mocking mockito