3

ステートレス Bean があるとします。

@Stateless(name = "fooBean")
@LocalBean
public class Foo {
...
}

テスト用のモックを作成したい (CDI を使用)

@Alternative @Specializes
public class FooMock extends Foo {
...
}

モックを に登録し、beans.xmlOpenEJB で実行すると、次の例外が発生します。

...
Caused by: javax.naming.NameAlreadyBoundException:
openejb/Deployment/fooBean/com.company.Foo!LocalBeanHome

Fooコンテナがのインターフェースを作成@LocalBeanするように思えFooMockます。OpenEJB は、2 つのクラスを同じ生成インターフェースの同じ名前でバインドしようとしますが、これは不可能です。

もちろん、コメントアウトしてクラス内にいれば@Stateless、問題なく動作します@LocalBeanFoo

これを解決するためのアイデアや提案はありますか?

4

1 に答える 1

1

むしろ次のようなことをしてください:

@Local
public interface Foo {
...
}

@Stateless
public class FooBean implements Foo {
...
}

次に、モックを作成します。

@Alternative
@Specializes
public class FooMock implements Foo {
...
}

ただし、テスト用の @Alternative および特別な beans.xml エントリを必要とせずに、テストが非常に簡単になるArquillianを確認することをお勧めします。

于 2012-06-07T13:25:32.747 に答える