gpt4 book ai didi

java - 使用 Java 反射返回所有 null

转载 作者:行者123 更新时间:2023-12-01 05:25:59 25 4
gpt4 key购买 nike

我对这个很迷茫。我有一些基于 Spring 的 JUnit4 运行的验收测试。现在我还想添加单元测试。为了使它们更快,我跳过上下文并使用 PowerMock 注入(inject)模拟。然而突然间反射(reflection)就不再起作用了。

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();

会改变任何东西(认为运行时可能需要初始化类以便能够反射(reflect)它)

哦,还有添加

@RunWith(PowerMockRunner.class)

也不会改变任何东西。

有什么想法吗?

谢谢!

PS:从现在开始将出城一天,所以我会在大约 35 小时内阅读所有答案。

<小时/>

编辑

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

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

最佳答案

刚刚弄清楚:缺少有关在调试器中使用反射时如何工作的知识;)检查我的编辑...将其标记为已回答,但将其保留为引用。

关于java - 使用 Java 反射返回所有 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9669845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com