使用Java反射返回所有null



我对这个非常着迷。我有一些基于Spring的JUnit4运行的验收测试。现在我还想添加单元测试。为了让它们更快,我跳过上下文,用PowerMock注入Mocks。然而,突然的反思再也起不了作用了。

public class TestSomething {
    @Test
    public void nothingWrongWithThis() {
        Class<?> type = Client.class;
        type.getDeclaredMethods();
    }
}

第二行将像除getName()之外的任何其他方法调用一样返回null

然而,如果我使用上下文,它会起作用:

@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)

也不会改变任何事情。

有什么想法吗?

谢谢!

附言:从现在开始,我将在外地呆一天,所以我会在大约35小时后阅读任何答案。


编辑

刚刚弄清楚发生了什么:我在调试器中启动并打开了Client.class.declaredMethods,即null。当我运行getDeclaredMethods()时,它会得到它们。所以一开始看起来好像所有的东西都是空的,这让我很困惑,但调试器没有在所有字段上运行get...(),最初只剩下null

如果我使用spring上下文,它将加载所有bean(Client@Entity),并用软引用填充所有反射字段,就像我对所有反射字段调用get..()一样。

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

相关内容

  • 没有找到相关文章

最新更新