使用参数化构造函数模拟最终类

时间:2016-11-02 05:02:44

标签: java junit mockito powermockito

我有一个最终课程如下

public  class firstclass{

   private String firstmethod(){

       return new secondclass("params").somemethod();

}

}


public final class secondclass{

   secondclass(String params){

        //some code

}

public String somemethod(){

         // some code 
        return somevariable";
}
}

我必须在这里测试第一堂课,所以我在下面嘲笑了这个

secondclass classMock = PowerMockito.mock(secondclass .class);
        PowerMockito.whenNew(secondclass .class).withAnyArguments().thenReturn(classMock);
Mockito.doReturn("test").when(classMock).somemethod();

但这并不像我预期的那样可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

  1. 方法firstclass.firstmethod()是私有方法。因此,尝试通过公共方法测试此方法,然后调用它。

  2. 您可以使用SecondClass@RunWith(PowerMockRunner.class)注释来模拟@PrepareForTest(SecondClass.class)及其最终方法。

  3. 请参阅下面的工作代码:

    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.mockito.Mockito;
    import org.powermock.api.mockito.PowerMockito;
    import org.powermock.core.classloader.annotations.PrepareForTest;
    import org.powermock.modules.junit4.PowerMockRunner;
    
    @RunWith(PowerMockRunner.class)
    @PrepareForTest(SecondClass.class)
    public class FirstClassTest{
    
    
        @Before
        public void init() {
    
        }
    
        @After
        public void clear() {
    
        }
    
        @Test
        public void testfirstmethod() throws Exception{
    
            SecondClass classMock = PowerMockito.mock(SecondClass.class);
            PowerMockito.whenNew(SecondClass.class).withAnyArguments().thenReturn(classMock);
            Mockito.doReturn("test").when(classMock).somemethod();
    
            new FirstClass().firstmethod();
        }
    }
    

    使用的库:

    enter image description here