1

我对这个很迷茫。我有一些基于 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.declaredMethodsnull. 但是,当我运行getDeclaredMethods()时,它会得到它们。所以看起来好像一切都是空的,这让我感到困惑,但调试器并没有get...()在所有字段上运行,null最初离开了它们

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

4

1 回答 1

0

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

于 2012-03-14T08:32:50.583 回答