RunWith(PowerMockRunner.class)不适用于程序包注释 [英] RunWith(PowerMockRunner.class) does not work with package annotation
问题描述
我正在尝试让RunWith(PowerMockRunner.class)与我现有的包注释一起使用.
I am trying to have RunWith(PowerMockRunner.class) working with my existing package annotation.
版本:
powermock 1.4.12模拟1.9.0 junit 4.8.2
powermock 1.4.12 mockito 1.9.0 junit 4.8.2
package-info.java //这是用于包注释的
package-info.java // this is for the package annotation
@TestAnnotation(version="1.0")
package com.smin.dummy;
TestAnnotation.java //这是"com.smin.dummy"包的元数据注释类
TestAnnotation.java // this is the the metadata annotation class for package "com.smin.dummy"
package com.smin.dummy;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PACKAGE)
public @interface TestAnnotation {
String version();
}
A.java
package com.smin.dummy;
public class A {
private static Package myPackage;
private static TestAnnotation version;
static {
myPackage = TestAnnotation.class.getPackage();
version = myPackage.getAnnotation(TestAnnotation.class);
}
public static String getVersion() {
return version.version();
}
}
MockA.java
package com.smin.dummy;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import com.smin.dummy.A;
@RunWith(PowerMockRunner.class) //comment out this line to see the difference
@PrepareForTest(A.class)
public class MockA {
@Test
public void test_mocked() throws Throwable {
String thisVersion = A.getVersion();
System.out.println(thisVersion);
}
}
在最简单的 MockA.java 中,如果我不使用RunWith(PowerMockRunner.class)
,我将得到预期的thisVersion
打印的0.1
.但是添加RunWith(PowerMockRunner.class)
后,thisVersion
会变成null
.我怀疑PowerMockRunner在此处使用包注释在做一些有趣的事情,有人有什么主意吗?请在下面查看我的代码的迷你版:
In the unitest MockA.java, if I don't use RunWith(PowerMockRunner.class)
, I will get the thisVersion
printed 0.1
as expected. But after adding RunWith(PowerMockRunner.class)
, thisVersion
turns into null
. I suspect PowerMockRunner is doing some funny thing with the package annotation here, anybody has any idea? see the mini version of my code below:
推荐答案
在注释中@Alban的侦听基础上,似乎将此注释添加到您的测试用例中应该可以解决此问题:
Building on @Alban's sleuthing in the comments, it looks like adding this annotation to your test case should circumvent the problem:
@PowerMockIgnore("com.smin.dummy.TestAnnotation")
这篇关于RunWith(PowerMockRunner.class)不适用于程序包注释的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!