我对这个很迷茫。我有一些基于 Spring 使用 JUnit4 运行的验收测试。现在我还想添加单元测试。为了让它们更快,我跳过上下文并使用 PowerMock 注入 Mocks。然而,所有突然的反思将不再起作用。
public class TestSomething {
@Test
public void nothingWrongWithThis() {
Class<?> type = Client.class;
type.getDeclaredMethods();
}
}
第二行将返回 null ,就像对该类型的任何其他方法调用一样,除了 getName()
但是,如果我使用上下文,它将起作用:
@TransactionConfiguration
@ContextConfiguration({ "classpath:dw-product-context-test.xml" })
@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
public class TestSomething {
@Test
public void nothingWrongWithThis() {
Class<?> type = Client.class;
type.getDeclaredMethods();
}
}
这里有什么问题?没有任何跑步者或上下文,反射不应该工作吗?
甚至没有添加行
private Client client = new Client();
将改变任何东西(认为可能需要初始化类以便能够反映它的运行时)
哦,添加
@RunWith(PowerMockRunner.class)
也不会改变任何东西。
有任何想法吗?
谢谢!
PS:从现在开始将出城一天,所以我会在大约 35 小时内阅读任何答案。
编辑
刚刚弄清楚发生了什么:我在调试器中开始并打开Client.class.declaredMethods
了null
. 但是,当我运行getDeclaredMethods()
时,它会得到它们。所以看起来好像一切都是空的,这让我感到困惑,但调试器并没有get...()
在所有字段上运行,null
最初离开了它们
如果我使用 spring 上下文,它将加载所有 bean ( Client
is an @Entity
) 并用软引用填充所有反射字段,就像我调用get..()
所有它们一样。