我有TestME类,它具有静态main方法。我需要避免调用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");
}
}
我上面的TestMe类的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"));
}
}
答案 0 :(得分:0)
在调用静态方法时,无需模拟TestMe。像下面的TestMe.testme这样的简单调用。
@Test
public void testMe(){
doNothing().when(b).cool();
Assert.assertEquals(2, TestMe.testme("xyz", "omg"));
}
答案 1 :(得分:0)
您可以从以下位置更改代码
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来实现。