使用PowerMockito.whennew的时候,注解preparefortest里面的类需要是mock的new代码所在的类的对象

Posted nizuimeiabc1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用PowerMockito.whennew的时候,注解preparefortest里面的类需要是mock的new代码所在的类的对象相关的知识,希望对你有一定的参考价值。

Mock方法内部new出来的对象

 

       测试目标代码:

 

01

public class ClassUnderTest {

02

 

03

    public boolean callInternalInstance(String path) { 

04

 

05

        File file = new File(path); 

06

 

07

        return file.exists(); 

08

 

09

    } 

10

}

       测试用例代码:    

 

01

@RunWith(PowerMockRunner.class) 

02

public class TestClassUnderTest {

03

 

04

    @Test 

05

    @PrepareForTest(ClassUnderTest.class) 

06

    public void testCallInternalInstance() throws Exception { 

07

 

08

        File file = PowerMockito.mock(File.class); 

09

 

10

        ClassUnderTest underTest = new ClassUnderTest(); 

11

 

12

        PowerMockito.whenNew(File.class).withArguments("bbb").thenReturn(file); 

13

         

14

        PowerMockito.when(file.exists()).thenReturn(true); 

15

 

16

        Assert.assertTrue(underTest.callInternalInstance("bbb")); 

17

    } 

18

}

      说明:当使用PowerMockito.whenNew方法时,必须加注解@PrepareForTest和@RunWith。注解@PrepareForTest里写的类是需要mock的new对象代码所在的类。

Mock方法内部new出来的对象

       测试目标代码:

01 public class ClassUnderTest {
02  
03     public boolean callInternalInstance(String path) { 
04  
05         File file = new File(path); 
06  
07         return file.exists(); 
08  
09     
10 }

       测试用例代码:    

01 @RunWith(PowerMockRunner.class
02 public class TestClassUnderTest {
03  
04     @Test 
05     @PrepareForTest(ClassUnderTest.class
06     public void testCallInternalInstance() throws Exception { 
07  
08         File file = PowerMockito.mock(File.class); 
09  
10         ClassUnderTest underTest = new ClassUnderTest(); 
11  
12         PowerMockito.whenNew(File.class).withArguments("bbb").thenReturn(file); 
13          
14         PowerMockito.when(file.exists()).thenReturn(true); 
15  
16         Assert.assertTrue(underTest.callInternalInstance("bbb")); 
17     
18 }

      说明:当使用PowerMockito.whenNew方法时,必须加注解@PrepareForTest和@RunWith。注解@PrepareForTest里写的类是需要mock的new对象代码所在的类。

以上是关于使用PowerMockito.whennew的时候,注解preparefortest里面的类需要是mock的new代码所在的类的对象的主要内容,如果未能解决你的问题,请参考以下文章

Mock随手记

我们可以使用Mockito和PowerMock出售junit测试类

我们啥时候应该使用互斥锁,啥时候应该使用信号量

c#啥时候应该使用List,啥时候应该使用arraylist?

什么时候使用flush()?

什么时候使用程序,什么时候使用函数?