0

Seam 2.2 を使用しています。Reflections を使用して Seam コンポーネントからプライベート フィールドを取得したいと考えています。ので、私は持っています:

    LocalizationEditActionRoot localizationEditActionRoot = (LocalizationEditActionRoot) Component
                        .getInstance(LocalizationEditActionRoot.class, true);
    Class currentClass = localizationEditActionRoot.getClass();
    WebDavMockClient mockClient = new WebDavMockClient();
    Field f = currentClass.getDeclaredField("davClient");
    f.setAccessible(true);
    f.set(localizationEditActionRoot, mockClient);

というフィールドを取得したい場合davClient(WebDavClient)、NoSuchFieldException が発生します。フィールドはもちろん注入されます。私がこのようなことをしようとすると:

    Class currentClass = Class.forName("fr.isiom.bpms.admin.session.ext.action.root.LocalizationEditActionRoot");
    WebDavMockClient mockClient = new WebDavMockClient();
    Field f = currentClass.getDeclaredField("davClient");
    f.setAccessible(true);
    f.set(localizationEditActionRoot, mockClient);

フィールドを取得しましたdavClientが、値は変更されません。彼は依然として WebDavMockClient ではなく WebDavClient のインスタンスです。そのフィールド値を変更するにはどうすればよいですか?

4

1 に答える 1

0

私は反射でそれを行うことができませんでした。代わりに、より簡単なアイデア/解決策を見つけました。私のテスト クラスでは、Create/setUp メソッドで Seam Context から sessionContext を取得し、webDavClient 名を WebDavClient の代わりに WebDavMockClient にバインドされるように変更します。そして、これはワンライナーでこの問題全体を解決する方法です:

// Setting webDavClient to be injected by seam as WebDavMockClient to mock the actual delete
Contexts.getSessionContext().set("webDavClient", new WebDavMockClient());
于 2012-11-21T13:48:42.487 に答える