相关疑难解决方法(0)

Junit参数化测试与Powermock一起 - 如何?

我一直试图弄清楚如何在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?

java junit parameterized powermock

40
推荐指数
2
解决办法
1万
查看次数

使用@RunWith Annotation和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.classPowerMockRunner.class

java junit mockito powermock

12
推荐指数
2
解决办法
2万
查看次数

如何结合 PowerMock 和 Robolectric

我有一个静态方法来检查互联网状态,它使用上下文。所以要模拟它,我需要使用 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)

java unit-testing powermock robolectric powermockito

5
推荐指数
1
解决办法
5101
查看次数