Mockito:当任何实例调用方法时,然后返回一些东西
Mockito: When any instance invokes method, thenReturn something
我是 Mockito 的新手,class 喜欢
public class A {
private B b;
public B getB() { return b; }
// ...
}
和
public class B {
private C c;
public C getC() { return c; }
// ...
}
我正在使用 Mockito 为 class A 编写单元测试,并尝试实现以下行为,其中 B 是模拟:
when(a.getB().getC()).thenReturn(mock(C.class))
when(any(mock(C.class)).doSomething()).thenReturn("somethingElse") // This doesn't work.
当 C 的任何模拟实例调用 doSomething() 时,我如何 return "somethingElse"?我不想将此行为绑定到任何一个特定的 mock(C.class) 实例。
不要添加用于创建新模拟的 ```mock()``。
像这样
when(any(C.class).doSomething()).thenReturn("somethingElse");
首先,你得把你的测试对象当成一个单元来对待,其他的都mock。因此,由于您正在测试 class A
,因此您不能模拟 A
s 方法。
以下是如何使用 Mockito 使用注释模拟 B
的实例:
@MockitoSettings
public class ATest {
@Mock
private B b;
@InjectMocks
private A a;
@Test
void testExample() {
C c = mock(C.class):
when(b.getC()).thenReturn(c);
when(c.doSomething()).thenReturn("somethingElse");
// a.getB() == b
}
}
那么这里发生了什么?
注解 @Mock
正在初始化一个类型为 B
的模拟对象并为其设置字段变量 b
。
@InjectMocks
正在收集所有 @Mock
字段并在对象中设置字段。这是你的测试对象。
现在您的 A
实例有一个模拟的 B
对象。在 B 中,您有 C
。由于 B
是一个模拟对象,因此 getC()
方法根本不做任何事情。你必须用一些功能来存根它。在测试中,我已经初始化了一个本地模拟 C
实例以从 getC()
.
返回
所以现在当 A
对象访问模拟的 B
并获得 C
时,它将使用这个局部变量 c
。所以你可以用模拟函数存根这个对象。
我是 Mockito 的新手,class 喜欢
public class A {
private B b;
public B getB() { return b; }
// ...
}
和
public class B {
private C c;
public C getC() { return c; }
// ...
}
我正在使用 Mockito 为 class A 编写单元测试,并尝试实现以下行为,其中 B 是模拟:
when(a.getB().getC()).thenReturn(mock(C.class))
when(any(mock(C.class)).doSomething()).thenReturn("somethingElse") // This doesn't work.
当 C 的任何模拟实例调用 doSomething() 时,我如何 return "somethingElse"?我不想将此行为绑定到任何一个特定的 mock(C.class) 实例。
不要添加用于创建新模拟的 ```mock()``。
像这样
when(any(C.class).doSomething()).thenReturn("somethingElse");
首先,你得把你的测试对象当成一个单元来对待,其他的都mock。因此,由于您正在测试 class A
,因此您不能模拟 A
s 方法。
以下是如何使用 Mockito 使用注释模拟 B
的实例:
@MockitoSettings
public class ATest {
@Mock
private B b;
@InjectMocks
private A a;
@Test
void testExample() {
C c = mock(C.class):
when(b.getC()).thenReturn(c);
when(c.doSomething()).thenReturn("somethingElse");
// a.getB() == b
}
}
那么这里发生了什么?
注解 @Mock
正在初始化一个类型为 B
的模拟对象并为其设置字段变量 b
。
@InjectMocks
正在收集所有 @Mock
字段并在对象中设置字段。这是你的测试对象。
现在您的 A
实例有一个模拟的 B
对象。在 B 中,您有 C
。由于 B
是一个模拟对象,因此 getC()
方法根本不做任何事情。你必须用一些功能来存根它。在测试中,我已经初始化了一个本地模拟 C
实例以从 getC()
.
所以现在当 A
对象访问模拟的 B
并获得 C
时,它将使用这个局部变量 c
。所以你可以用模拟函数存根这个对象。