使用Java反射返回所有空值

时间:2012-03-12 15:22:59

标签: java spring reflection null powermock

我很遗憾。我有一些基于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..()一样它们。

1 个答案:

答案 0 :(得分:0)

刚想通了:在调试器中使用时缺少有关反射如何工作的知识;)检查我的编辑...将此标记为已回答但保留为参考。