这是我班级的定义:
class A
{
public b method1()
{
//some code
}
}
class Z
{
A a = new A();
public c method2()
{
z = a.method1();
//some code validating z
}
}
我想使用junit测试method2。 方法2()中的method1()调用应返回有效的z。 我该怎么办呢?
答案 0 :(得分:0)
示例代码中b
,c
和z
应该包含哪些内容?
通常你模拟你测试的方法正在调用的所有其他对象,或者那些被调用的对象需要的对象,例如:可以像这样嘲笑a.method1()
电话:
// Arrange or given
Z sut = new Z();
Object method1RetValue = new Object();
A mockedA = mock(A.class);
Mockito.when(mockedA.method1()).thenReturn(method1RetValue);
// set the mocked version of A as a member of Z
// use one of the following instructions therefore:
sut.a = mockedA;
sut.setA(mockedA);
Whitebox.setInternalState(sut, "a", mockedA);
// Act or when
Object ret = sut.method2();
// Assert or then
assertThat(ret, is(equalTo(...)));
由于a
是您的测试类的成员,您需要首先设置模拟版本,通过直接字段分配,setter方法或通过Whitebox.setInternalState(...)
,如示例中所示上面的代码。
请注意,mocked方法当前返回一个对象,您可以返回该方法返回的内容。但是由于你的例子缺乏真正的类型,我只是在这里使用了一个对象。