我有类TestME,它有静态主方法。我需要避免调用 b.cool 方法。
public class TestME {
public static int testme(String ...strings){
System.out.println(strings.length);
B b = new B();
b.cool();
return strings.length;
}
}
我的B类在下面
public class B {
public void cool(){
System.out.println("I am cool");
}
}
我的 Junit 课程在上面测试我课程如下
@RunWith(MockitoJUnitRunner.class)
public class JunitTest {
@Spy
B b;
@InjectMocks
TestME test;
@Before
public void setUp(){
test = new TestME();
MockitoAnnotations.initMocks(this);
}
@Test
public void testMe(){
doNothing().when(b).cool();
Assert.assertEquals(2, test.testme("xyz", "omg"));
}
}
您可以从以下位置更改代码:
public class TestME {
public static int testme(String ...strings){
System.out.println(strings.length);
B b = new B();
b.cool();
return strings.length;
}
}
到以下内容:
public class TestME {
public static int testme(String ...strings){
System.out.println(strings.length);
B b = getInstanceOfB();
b.cool();
return strings.length;
}
static B getInstanceOfB(){
return new B();
}
}
然后在测试代码中,您可以监视类、存根getInstanceOfB()
返回模拟对象的方法。拥有这种真正的b.cool
永远不会在测试中调用。
@RunWith(PowerMockRunner.class)
@PrepareForTest(TestME.class)
public class JunitTest {
@Before
public void setUp(){
B b = PowerMockito.mock(B.class);
PowerMockito.spy(TestME.class);
PowerMockito.when(TestME.getInstanceOfB()).thenReturn(b);
}
@Test
public void testMe(){
Assert.assertEquals(2, TestME.testme("xyz", "omg"));
}
}
你需要一个PowerMockito来完成它。
由于您调用静态方法,因此无需模拟TestMe。简单的调用,如TestMe.testme,如下所示。
@Test
public void testMe(){
doNothing().when(b).cool();
Assert.assertEquals(2, TestMe.testme("xyz", "omg"));
}