Jar*_*ett 9 java mocking mockito spy
我一直无法找到一种方法来使用“Deep Stubs”对 Mockito 中的间谍进行存根方法。我想做的是这样的:
@Spy private Person person = //retrieve person
@Test
public void testStubbed() {
doReturn("Neil").when(person).getName().getFirstName();
assertEquals("Neil", person.getName().getFirstName());
}
Run Code Online (Sandbox Code Playgroud)
上面的代码编译没有问题,但在运行测试时,它失败,说明 getName() 无法返回返回类型(在本例中为 Name 类)。
通常,在模拟时,您必须使用
@Mock(answer = Answers.RETURNS_DEEP_STUBS)每个模拟对象。不过spy好像没有这样的东西。
有没有人曾经使用间谍成功地进行过深度模拟?
下面列出了我收到的错误:
String cannot be returned by getName()
getName() should return Name
Due to the nature of the syntax above problem might occur because of:
1. Multithreaded testing
//I'm not doing multithreaded testing
2. A spy is stubbed using when(spy.foo()).then() syntax. It is safer to stub spies with doReturn|Throw() family of methods
//As shown above, I'm already using the doReturn family of methods.
Run Code Online (Sandbox Code Playgroud)
虽然我仍然想知道是否有更好的方法来做到这一点,但我想为任何前来寻找的人发布一个解决方案。
下面的解决方案工作正常,要求您为每个级别的依赖项创建一个新的模拟(甚至是真实的对象/间谍)。换句话说,您无需链接方法调用来创建存根,而是单独模拟每个级别。
@Spy private Person person = //retrieve person
@Mock private Name name;
@Test
public void testStubbed() {
doReturn(name).when(person).getName();
doReturn("Neil").when(name).getName();
assertEquals("Neil", person.getName().getFirstName());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9979 次 |
| 最近记录: |