私はこの1つをかなり失いました。私はJUnit4でSpringをベースにしたいくつかの受け入れテストを行っています。今、ユニットテストを追加したいと思います。それらを速くするために、私はコンテキストをスキップし、PowerMockでMockを注入します。 しかし、突然の反射のすべてはもう働きません。二行目は、私は、コンテキストを使用している場合しかし、それは動作しますJavaリフレクションを使用するとすべてnullが返されます
)(のgetName以外のタイプに他のメソッド呼び出しのようにnullを返します
public class TestSomething {
@Test
public void nothingWrongWithThis() {
Class<?> type = Client.class;
type.getDeclaredMethods();
}
}
:
@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時間で回答をお読みになります。
編集
だけで何が起こっていたかを考え出し: 私は、デバッガで起動し、null
たClient.class.declaredMethods
をオープンしました。私がgetDeclaredMethods()
を実行すると、それはそれらを得るでしょう。だから、すべてが私を混同した最初のヌルだったかのように見えたが、デバッガはちょうど(Client
が@Entity
である)私は春のコンテキストを使用している場合、それはすべてのBeanをロードします最初はnull
それらを残してすべてのフィールドにget...()
を実行しませんでしたちょうど私がget..()
をすべて呼び出したかのように、すべての反射フィールドにソフトリファレンスを入力してください。
ローディング時間は使用していますか?両方のテストが同じ 'Client'クラス(同じパッケージ)を使用していますか? – Ralph
'type.getDeclaredMethods();'は 'null'を返すことができますか、空の配列を返していますか? – Ralph
ご意見ありがとうございます。それを見て、私の編集をチェックしてください。 – Pete