java - 在抽象类中模拟静态方法

标签 java junit mockito powermock

我有一个类 A,它调用抽象类 B 的静态方法,该方法抛出一些异常。我想测试这个异常。我正在使用 junit 4.1、mockito 1.9.5 和 powermock 1.6.6。这些类(class)是:

 abstract class B {
 public static void meth(String str) throws SomeException1, SomeException2,SomeException3 {
 //some code 
  }
}

class A{
 public void method() throws SomeException1, SomeException2,SomeException3 {
  B.meth1("abc");
  }
}

我想测试这些异常,这是我的测试类

@RunWith(MockitoJUnitRunner.class)
@PrepareForTest(B.class)
class Test throws Throwable {

public void testException(){
PowerMockito.mockStatic(B.class); //Line 6
when(B.meth(Mockito.any(String.class))).thenThrow(new SomeException1(), new SomeException2(), new SomeException3() );
A obj=new A();
obj.method();
   }
  }
}

执行这个测试用例时出现异常

org.powermock.api.mockito.ClassNotPreparedException: 
The class B not prepared for test.
To prepare this class, add class to the '@PrepareForTest' annotation.
In case if you don't use this annotation, add the annotation on class or  method level. 

at org.powermock.api.mockito.expectation.reporter.MockitoPowerMockReporter.classNotPrepared(MockitoPowerMockReporter.java:32)
at org.powermock.api.mockito.internal.mockcreation.MockTypeValidatorFactory$DefaultMockTypeValidator.validate(MockTypeValidatorFactory.java:38)
at org.powermock.api.mockito.internal.mockcreation.AbstractMockCreator.validateType(AbstractMockCreator.java:10)
at org.powermock.api.mockito.internal.mockcreation.DefaultMockCreator.createMock(DefaultMockCreator.java:56)
at org.powermock.api.mockito.internal.mockcreation.DefaultMockCreator.mock(DefaultMockCreator.java:46)
at org.powermock.api.mockito.PowerMockito.mockStatic(PowerMockito.java:71)
at Test.testException(Test.java:6)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

关于我为什么会得到这个有什么建议吗?

最佳答案

你需要这个:@RunWith(PowerMockRunner.class)

关于java - 在抽象类中模拟静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43973191/

相关文章:

java - 创建 2D 自上而下倾斜地形而不是完全平坦的地形

Java 泛型,<C> 是否等于 <T>?

java - Spring Boot @Autowired 在单元测试中返回 NullPointerException

android - Junit 4 不识别测试

java - 从测试方法访问时单例返回新实例

java - Mockito thenReturn 返回相同的实例

java - 在java中,当 "DatatypeConverter.printBase64Binary"使用该函数时,预期结果不同

java - 运行 Cucumber Junit 测试时出错 :Intializationerror

unit-testing - JUnit测试: Difference between never() and times(0)

java - 如何在java中使用mockito模拟调用类的方法