1

私はこれでかなり迷っています。Spring ベースの JUnit4 でいくつかの受け入れテストを実行しています。ここで、単体テストも追加したいと思います。それらを高速にするために、コンテキストをスキップして、PowerMock でモックを注入します。ただし、突然の反射はすべて機能しなくなります。

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

2 行目は、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)

も何も変わりません。

何か案は?

ありがとう!

PS: 今日から 1 日外出するので、35 時間以内に回答を読み上げます。


編集

何が起こっているのかを理解したところです。デバッガーを起動して、Client.class.declaredMethodsどれがnull. ただし、実行getDeclaredMethods()するとそれらが取得されます。そのため、最初はすべてが null のように見えて混乱しましたが、デバッガーはget...()すべてのフィールドで実行されず、null最初はそれらを残していました

スプリング コンテキストを使用すると、すべての Bean ( Clientis an @Entity) が読み込まれ、すべてのリフレクション フィールドがソフト参照で埋められget..()ます。

4

1 に答える 1

0

ちょうどそれを理解しました: デバッガーで使用されたときにリフレクションがどのように機能するかについての知識がありません;)私の編集を確認してください...これを回答済みとしてマークしますが、参照として残します。

于 2012-03-14T08:32:50.583 に答える