2016-05-25 41 views
0

EasyMockを初めて使用し、プロジェクトでJUnitを実装するのは初めてです。 以下は私がここでやっていることを理解できるコードを見て、私のテストクラスです。私はEasyMock 3.4を使用しています。EasyMock:AssertionError - 予期しないメソッド呼び出し:複数の模擬オブジェクトを含む複数のエクスプレッションを含む

簡潔に: 私は実際の方法であるJunitを書いていますFmrTradeConsumerImpl.onTODEvent(TodEvents todEvents)

myTestClass:

@RunWith(EasyMockRunner.class) 
public class FmrTradeConsumerImplTest extends EasyMockSupport { 

    @TestSubject 
    private FmrTradeConsumerImpl fmrTradeConsumer = new FmrTradeConsumerImpl(); 
    @Mock 
    private TradeService tradeService; 
    @Mock 
    private TradeIvTypeValidator tradeValid; 
    @Mock 
    private TodEvents todEvents; 

    private List<TradeDetails> tradesList; 
    private SecurityTradeExecution tradeEx; 
    private List<SecurityTradeExecution> securityTradeEx; 

    @Before 
    public void init() { 

     tradeService = niceMock(TradeService.class); 
     todEvents = niceMock(TodEvents.class); 
     securityTradeEx = new ArrayList<>(); 
     tradesList = new ArrayList<>(); 
     tradeEx = new SecurityTradeExecution(); 
     tradeValid = niceMock(TradeIvTypeValidator.class); 
     resetAll(); 
    } 

    @Test 
    public void onTODEvent() { 
     tradeEx.setFundNumber(Long.valueOf("2016")); 
     tradeEx.setSourceSystemCd("AIM"); 
     tradeEx.setIvType("Test"); 
     securityTradeEx.add(tradeEx); 

     expect(todEvents.getSecurityTradeExcecutions()).andReturn(securityTradeEx); 
     expect(tradeValid.isValidIvType("Test")).andReturn(true); 

     tradeService.saveTradeRecordsListAsBatch(tradesList); 
     expectLastCall().andVoid(); 

     replayAll(); 

     fmrTradeConsumer.onTODEvent(todEvents); 
    } 
} 

そして、私はエラーの下に取得しています:

java.lang.AssertionError: 
    Unexpected method call TradeIvTypeValidator.isValidIvType("Test"): 
    at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:44) 
    at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:94) 
    at org.easymock.internal.ClassProxyFactory$MockMethodInterceptor.intercept(ClassProxyFactory.java:97) 
    at com.fmr.ftg.es.mas.tod.client.TradeIvTypeValidator$$EnhancerByCGLIB$$311c4357.isValidIvType(<generated>) 
    at com.fmr.ftg.es.mas.tod.client.impl.FmrTradeConsumerImpl.isValidTrade(FmrTradeConsumerImpl.java:120) 
    at com.fmr.ftg.es.mas.tod.client.impl.FmrTradeConsumerImpl.onTODEvent(FmrTradeConsumerImpl.java:67) 
    at com.fmr.ftg.es.mas.tod.client.impl.FmrTradeConsumerImplTest.onTODEvent(FmrTradeConsumerImplTest.java:78) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 

はあなたの提案を提供してください、 は事前にありがとうございました。

答えて

0

"@Mock"アノテーションを "private TradeIvTypeValidator tradeValid;"の代わりに使用する代わりに "@NiceMock"を使用してください。 ここでNiceMockはデフォルトの実装を提供しており、開発者が同じように "@Mock"を使用している場合は

+0

@NiceMock注釈はEasyMock 3.4で利用可能とは思われませんが、@Mock(type = MockType.NICE)で行うことができます。返信と入力をありがとうございます。 – Yakam

+0

ああ、私はバージョンを見落とした。 –

0

作成後にすべてのモックをリセットするのはなぜですか?あなたはその行を削除し、それが動作するか試してみることができます

関連する問題