コンストラクターで EJB へのローカル接続を実装したクラスのテストで問題に直面しています。この接続はコンストラクター内で使用され、インスタンス化されたクラスのいくつかのプライベート属性を設定します。
テストしたい MyClass :
public class MyClass {
private String myValue;
public MyClass() throws Exception {
MyBeanLocal local = EJBFactory.getLocal(MyBeanLocal.class);
myValue = local.fetchValue();
}
public void processValue() {
... do some String magic which should be tested ...
}
public String getValue() {
return myValue;
}
}
EJBFactory には拡張ルックアップ (キャッシング付き) が含まれており、ローカル接続またはリモート接続を返すことができます (リモートにはサーバーの場所が必要です)。
MyBeanLocal インターフェース
public interface MyLocalBean {
public String fetchValue();
}
そして最後に、 MyClass.processValue メソッドをテストしたい私のjunitクラス:
public class MyClassTest {
private MyClass myClass;
@Before
public void setUp() {
myClass = new MyClass();
}
@Test
public void testProcessValue() {
Assert.assertEquals(myClass.processValue(), "MY EXPECTED VALUE");
}
}
問題は、JUnits をローカル マシン (または Hudson や Jenkins などの自動テスト マシン) で実行し、ローカルとは異なるアプリケーション サーバー コンテキストで Bean を実行する場合の状況をテストする方法です。テストを書く必要があるだけで、本番コードに触れることはできません。
実際には MyBeanLocal を機能させる必要はありませんが、myValue を設定する必要があります。
あざけることを考えていましたが、私はそれに慣れていません。