我一直试图弄清楚如何在Junit4中与PowerMock一起运行参数化测试.问题是要使用PowerMock,你需要用你的测试类来装饰
@RunWith(PowerMockRunner.class)
Run Code Online (Sandbox Code Playgroud)
并使用参数化测试你必须装饰
@RunWith(Parameterized.class)
Run Code Online (Sandbox Code Playgroud)
从我所看到的,他们似乎相互排斥!?这是真的?有没有办法解决?我试图在运行PowerMock的类中创建一个参数化类; 这样的事情:
@RunWith(PowerMockRunner.class)
class MyTestClass {
@RunWith(Parameterized.class)
class ParamTestClass {
// Yadayada
}
}
Run Code Online (Sandbox Code Playgroud)
但不幸的是,这并没有太大的好处...... ParamTestClass仍然没有PowerMock支持(也许不是那么令人惊讶)...而且我有点想法,所以任何帮助都非常感谢!
更新: 对于未来的googlers也会看到:在没有RunWith的情况下使用PowerMock?
最初我在junits中只使用Mockito所以我在@RunWith注释中使用了SpringJUnit4ClassRunner.class,即
@RunWith(SpringJUnit4ClassRunner.class)
Run Code Online (Sandbox Code Playgroud)
由于春季依赖注入工作正常,并正在通过
@Autowired
Someservice someservice ;
Run Code Online (Sandbox Code Playgroud)
但是现在,我还在其中集成了PowerMock.
因此,根据doc,我已经用@RunWith注释替换了提到的类
@RunWith(PowerMockRunner.class)
Run Code Online (Sandbox Code Playgroud)
但是现在,有些服务似乎是空的.有没有办法在@RunWith注释中同时使用SpringJUnit4ClassRunner.class和PowerMockRunner.class
我有一个静态方法来检查互联网状态,它使用上下文。所以要模拟它,我需要使用 PowerMock。我正在使用 robolectric 来加速我的测试,因为我唯一需要嘲笑的是被嘲笑的东西。但我似乎无法将 PowerMock(1.6.6) 和 Robolectric(3.2.2) 配置为一起工作。这就是我注释我的班级的方式:
@RunWith(RobolectricTestRunner.class)
@org.robolectric.annotation.Config(constants = BuildConfig.class, sdk = 21)
@PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "android.*"})
@PrepareForTest({Utils.class})
Run Code Online (Sandbox Code Playgroud)
设置方法中的这一行:
PowerMockito.mockStatic(Utils.class);
Run Code Online (Sandbox Code Playgroud)
但我收到此异常:
org.powermock.api.mockito.ClassNotPreparedException:
The class com.zeyad.usecases.data.utils.Utils 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 com.zeyad.usecases.data.repository.stores.DataStoreFactoryJUnitTest.setUp(DataStoreFactoryJUnitTest.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at …Run Code Online (Sandbox Code Playgroud)