2012-03-12 60 views
1

我完全迷失在這一個。我有一些基於Spring的JUnit4運行的接受測試。現在我也想添加單元測試。爲了讓他們快速跳過上下文並用PowerMock注入模擬。然而,所有突然的反射都不再有效。使用Java反射返回所有空值

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最初

如果我使用彈簧情況下它會加載所有的bean(Client@Entity)並用軟引用填充所有反射字段,就像我在所有字段上調用get..()一樣。

+0

你使用任何加載時間編織?你確定兩個測試都使用相同的'Client'類(相同的包)嗎? – Ralph 2012-03-12 15:32:45

+0

如何'type.getDeclaredMethods();'返回'null',或者你的意思是,它返回一個空數組? – Ralph 2012-03-12 15:35:10

+0

感謝您的意見。想通了,檢查我的編輯。 – Pete 2012-03-14 08:31:32

回答

0

剛剛計算出來:在調試器中使用時,缺少有關反射如何工作的知識;)檢查我的編輯...將此標記爲已回答,但將其留作參考。