【发布时间】:2016-06-08 15:31:22
【问题描述】:
我有一个如下所示的待测类:
import org.springframework.roo.addon.javabean.RooJavaBean;
import org.springframework.roo.addon.jpa.activerecord.RooJpaActiveRecord;
@RooJavaBean
@RooJpaActiveRecord(table="test_class", finders={ "findById" })
public class TestClass {
boolean test;
public static String returnSomething() {
return "X";
}
}
如您所见,它具有 Roo-Annotations 和我需要模拟的静态方法。
我的测试使用(模拟的)静态方法,并从这个类创建新对象。
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest(TestClass.class)
@PowerMockIgnore("javax.management.*")
public class PowerMockitoTest {
@Test
public void test() {
PowerMockito.mockStatic(TestClass.class);
PowerMockito.when(TestClass.returnSomething()).thenReturn("Y");
Assert.assertEquals("Y", TestClass.returnSomething());
TestClass x = new TestClass();
}
}
对new TestClass() 的调用给了我以下异常:
java.lang.NullPointerException
at org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect.ajc$if$bb0(AnnotationBeanConfigurerAspect.aj:1)
at ....TestClass.<init>(TestClass.java:8)
当我调试 AnnotationBeanConfigurerAspect 类时,我可以看到传递给此方法的 Configurable 确实为空
public static final boolean ajc$if$bb0(Configurable c) {
return c.preConstruction();
}
这是 Powermock 中的错误吗? 有什么解决方法吗?
使用的版本:
[INFO] +- junit:junit:jar:4.11:test
[INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- org.mockito:mockito-all:jar:1.9.5:test
[INFO] +- org.powermock:powermock-module-junit4:jar:1.5.3:test
[INFO] | \- org.powermock:powermock-module-junit4-common:jar:1.5.3:test
[INFO] | \- org.powermock:powermock-reflect:jar:1.5.3:test
[INFO] +- org.powermock:powermock-api-mockito:jar:1.5.3:test
[INFO] | \- org.powermock:powermock-api-support:jar:1.5.3:test
[INFO] +- org.powermock:powermock-module-junit4-rule:jar:1.5.1:test
[INFO] | +- org.powermock:powermock-classloading-base:jar:1.5.1:test
[INFO] | \- org.powermock:powermock-core:jar:1.5.1:test
[INFO] \- org.powermock:powermock-classloading-xstream:jar:1.5.1:test
【问题讨论】:
标签: junit aspectj spring-roo powermock