0

paymentBusinessService クラスは、BusinessService クラスの依存性注入で利用できます。アプリケーション sc = Applicaition.applicationValidation(this.deal);
Application sc = BusinessService.applicationValidation(this.deal); とします。

package com.core.business.service.dp.fulfillment;
import com.core.business.service.dp.payment.PaymentBusinessService;

public class BusinessServiceImpl implements BusinessService { // Actual Impl Class

private PaymentBusinessService paymentBusinessService = PluginSystem.INSTANCE.getPluginInjector().getInstance(PaymentBusinessService.class);  

@Transactional( rollbackOn = Throwable.class)
public Application  applicationValidation (final Deal deal) throws BasePersistenceException {
    Application application = (Application) ApplicationDTOFactory.eINSTANCE.createApplication();
    //External Call we want to Mock
    String report = paymentBusinessService.checkForCreditCardReport(deal.getId());  
    if (report != null) {          
        application.settingSomething(true);
    }
    return application;
}

}

@Test(enabled = true)// Test Class
public void testReCalculatePrepaids() throws Exception {
PaymentBusinessService paymentBusinessService = mock(PaymentBusinessService.class);
//Mocking External Call
when(paymentBusinessService.checkForCreditCardReport(this.deal.getId())).thenReturn(new String("Decline by only Me"));
String report = paymentBusinessService.checkForCreditCardReport(this.deal.getId());
//Calling Impl Class whose one external call is mocked
Application sc = BusinessService.applicationValidation(this.deal);  

}

4

2 に答える 2

0

モック オブジェクトをアプリケーション クラスに挿入するというアイデアをくれた Aurand に感謝します。@InjectMock を使用すると問題なく動作します。

@MOCK
PaymentBusinessService paymentBusinessService;

@InjectMock
Application application = PluginSystem.INSTANCE.getPluginInjector().getInstance(Application.class);  
@Test(enabled = true)// Test Class
public void testReCalculatePrepaids() throws Exception {
//Mocking External Call
when(paymentBusinessService.checkForCreditCardReport(this.deal.getId())).thenReturn(new       String("Decline by only Me"));
String report = paymentBusinessService.checkForCreditCardReport(this.deal.getId());
//Calling Impl Class whose one external call is mocked
Application sc = BusinessService.applicationValidation(this.deal);  
于 2013-01-17T16:40:12.860 に答える
0

Application クラスが PaymentBusinessService を参照する方法が明確ではありません。あなたの Application クラスには PaymentBusinessService への静的参照があると思います。その場合、参照が作成中のモックを指していることを確認する必要があります。

アップデート

PaymentBusinessService がコンストラクターで初期化されないプライベート フィールドであることを考えると、モック オブジェクトを Application クラスに反射的に注入する必要があります。

于 2013-01-11T00:32:58.670 に答える