私たちのプロジェクトでは、モジュールscout.client、scout.server、scout.shared、バックエンドがあります。Eclipseスカウトネオンモックバックエンドサービス
バックエンドはscout.serverおよびscout.sharedに依存しませんが、scout.serverはバックエンドに依存します。
バックエンドのプロジェクトの中に、私はすべてのビジネスロジックを持っており、すべての外部サービスを呼び出します。
私の問題は、バックエンドのサービスを使用するスカウトサービスをテストしようとするときです。
スカウトが豆をあざけるためのいくつかの素晴らしいツールを提供しているので、私たちのように豆とバックエンドの内側に当社のサービスを定義した:
BEANS.getBeanManager().registerClass(CarService.class);
BEANS.getBeanManager().registerClass(PartnerService.class);
どちらも、CarService.classとPartnerService.classはバックエンドです。
私はいくつかのテストを書いてみると、私はテストで
@BeanMock
private IPartnerService partnerService;
にサービスを提供するために@BeanMockを追加すると、私はモックを得るが、その後、すべては私が
doReturn(PartnerBuilder.standardPartnerListWithOneElement()).when(this.partnerService)
.getPartners(any(Set.class));
を書く場合でも、すべての機能がnullを返します
このテストはデバッガと呼ばれる前に、私は、私のテストでデバッグする場合、私は得ることができます:
partnerService.getPartners(...) -> return a list of person
右が何でありますか、テスト対象のクラスがこのサービスを呼び出すときはnullを返します。
これは、インタフェース@ApplicationScoped
の注釈がないことが原因である可能性があると私は理解します。これがなければ、bean
が1つしか作成されておらず、when
ステートメントがそのBeanの別のコピーに反応するという保証はありません...?
backendはスカウトモジュールに依存しないため、インタフェースに注釈を追加できませんでした。
このようなケースをどうすれば処理できますか?
テスト済みクラスです:
public class UtilityPartner {
/**
* Method return service bean for getting partners by ids.
*
* @return
*/
private static IPartnerService getPartnerService() {
return BEANS.get(IPartnerService.class);
}
public static String getPartnerName(final Long partnerId) {
if (partnerId == null) {
return "";
}
final List<Partner> partners =
(List<Partner>) getPartnerService().getPartners(Sets.newHashSet(partnerId));
if (partners == null || partners.isEmpty()) {
return "";
}
final Partner partner = partners.get(0);
return LookupUtil.createLookupDescription(partner.getId(), partner.getName());
}
}
テストクラスは次のとおりです。
@RunWith(ServerTestRunner.class)
@RunWithSubject("anonymous")
@RunWithServerSession(ServerSession.class)
public class TestUtilityPartner {
@BeanMock
private IPartnerService partnerService;
@Before
public void init() {
doReturn(PartnerBuilder.standardPartnerListWithOneElement()).when(this.partnerService).getPartners(any(Set.class));
}
@Test
public void getPartnerName() {
final String name = UtilityPartner.getPartnerName(10L);
Assert.assertEquals("My name", name); // NAME IS ""
}
}
うわーこの作品!私は追加の質問があります:あなたが私のbean(テストではなくPlatformListener)を登録するときにここに投稿したようにBEANを登録する方が良いでしょうか? –
私はコメントでこれに答えることはできません。 2番目の質問を他のスレッドに移す:http://stackoverflow.com/questions/36164077/scout-bean-manager-registerclass-or-registerbean – Jmini
私は、この例を 'TestingUtility'を使って更新しました。コードを更新する必要があります。 – Jmini