I am trying to run RunWith (PowerMockRunner.class) with my existing package annotation.
Versions:
powermock 1.4.12 mockito 1.9.0 junit 4.8.2
package-info.java // this is for package annotation
@TestAnnotation(version="1.0") package com.smin.dummy;
TestAnnotation.java // this is the metadata annotation class for the 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)
In unitest MockA.java , if I do not use RunWith(PowerMockRunner.class) , I will get thisVersion printed 0.1 , as expected. But after adding RunWith(PowerMockRunner.class) , thisVersion turns into null . I suspect PowerMockRunner is doing some fun thing with package annotation here, does anyone have an idea? see the mini version of my code below:
Shengjie
source share