我很遗憾。我有一些基于Spring的JUnit4运行的接受测试。现在我还想添加单元测试。为了使它们快速,我跳过上下文并使用PowerMock注入模拟。 然而,所有的突然反射都不再起作用了。
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
是@Entity
)并用软引用填充所有反射字段,就像我在所有上面调用get..()
一样它们。
答案 0 :(得分:0)
刚想通了:在调试器中使用时缺少有关反射如何工作的知识;)检查我的编辑...将此标记为已回答但保留为参考。