权力嘲笑嘲笑时新不生效



描述:

似乎无法让我的存根或模拟在我测试的课程中生效。我正在尝试使用 whenNew 操作,以便我可以模拟返回对象,然后使用返回值模拟对该对象的操作。

我想它很简单,我错过了,但没有看到它。

解决方案:最初我使用MockitoRunner.class运行,需要将其更改为PowerMockRunner.class。下面的代码反映了解决方案。

类路径上的罐子:

  • Powermock-mockito-1.4.11-full.jar
  • 模拟全部-1.9.0.jar
  • javassist-3.15.0-GA
  • .jar
  • JUNIT-4.8.2.jaf
  • objensis-1.2.jar
  • cglib-nodep-2.2.2.jar

测试类

   import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.powermock.api.mockito.PowerMockito;
    import static org.powermock.api.mockito.PowerMockito.*;
    import org.powermock.core.classloader.annotations.PrepareForTest;
    import org.powermock.modules.junit4.PowerMockRunner;
    import static org.mockito.Matchers.any;
    @RunWith(PowerMockRunner.class)
    @PrepareForTest(ClassA.class)
    public class ClassATest {
        @Test
        public void test() throws Exception
        {
                String[] returnSomeValue = {"PowerMockTest"};
                String[] inputValue = {"Test1"};
                ClassB mockedClassB = mock(ClassB.class);
                whenNew( ClassB.class).withNoArguments().thenReturn( mockedClassB );
                when( mockedClassB, "getResult", any(String[].class) ).thenReturn(returnSomeValue);       
                IClassA classUnderTest = new ClassA();
                String[] expectedValue = classUnderTest.runTest(inputValue);      
        }
    }

A 类实现

public class ClassA implements IClassA {
    @Override
    public String[] runTest(String[] inputValues) {
        String[] result;
        IClassB classB = new ClassB();
        result = classB.getResult(inputValues);
        return result;
    }
} 

由于您使用的是 powermock 功能(@PrepareForTestPowerMockito.whenNew 等),因此您必须使用 PowerMockRunner 运行测试。

@RunWith(PowerMockRunner.class)

因为 ClassB#geResult 不是私有的,你也可以简化你的代码并替换

when( mockedClassB, "getResult", any(String[].class) ).thenReturn(someValue); 

when(mockedClassB.getResult(any(String[].class))).thenReturn(someValue);

相关内容

  • 没有找到相关文章

最新更新