上述方法调用缺少行为定义:用法是:expect(a.foo()).和XXXX()

Btl*_*eva 6 java junit easymock

我是Junit的新手而且我遇到了问题.任何帮助将非常感激.

public void testGuaranteedRates() throws Exception
{

    ParticipantSummary summary = new ParticipantSummary();

    EasyMock.expect( iRequest.getPIN() ).andReturn( "1060720" );
    DateFormat dateFormat = new SimpleDateFormat( "yyyy/MM/dd HH:mm:ss" );
    Date date = new Date();
    EasyMock.expect( iRequest.getTradeDate() ).andReturn( date ).anyTimes();
    EasyMock.expect( control.prepareServiceRequest( iRequest ) ).andReturn( rtvint );
    EasyMock.replay();
    ems.replayAll();
}
Run Code Online (Sandbox Code Playgroud)

prepareServiceRequest()方法如下

org.tiaa.transact.generated.jaxb.inquiry.RetrieveRetirementVintages prepareServiceRequest(InquiryRequest inquiryRequest)
{

    logger.debug( "prepareServiceRequest enter" );
    org.tiaa.transact.generated.jaxb.inquiry.ObjectFactory objectFactory = new org.tiaa.transact.generated.jaxb.inquiry.ObjectFactory();
    org.tiaa.transact.generated.jaxb.inquiry.RetrieveRetirementVintages retirementVintages = objectFactory.createRetrieveRetirementVintages();

    if( ( inquiryRequest ) != null )
    {
        if( ( inquiryRequest.getPIN() ) != null )
        {
            retirementVintages.setPIN( inquiryRequest.getPIN() );
        }
        if( ( inquiryRequest.getTradeDate() != null ) )
        {
            Calendar cal = new GregorianCalendar();
            //retirementVintages.setTradeDate( TPDateUtil.convertDatetoXMLGregorianCalendar( inquiryRequest.getTradeDate() ) );
            //retirementVintages.setTradeDate(( inquiryRequest.getTradeDate() );
        }
    }
    logger.debug( "prepareServiceRequest exit" );
    return retirementVintages;
}
Run Code Online (Sandbox Code Playgroud)

当我试图测试它时,我收到如下错误

java.lang.IllegalStateException: missing behavior definition for the preceding method call: InquiryRequest.getPIN()

如果有任何问题,请问有谁可以告诉我.

mok*_*aya 9

假设iRequest并且control是模拟对象,您需要重放它们.

所以,而不是:

EasyMock.replay();
Run Code Online (Sandbox Code Playgroud)

试试这个:

EasyMock.replay(iRequest);
EasyMock.replay(control);
Run Code Online (Sandbox Code Playgroud)


Lou*_*ler 3

您在正在测试的方法中调用了inquiryRequest.getPin()两次,但只将模拟行为添加到一次调用中。所以,改为:

 EasyMock.expect( iRequest.getPIN() ).andReturn( "1060720" ).anyTimes(); 
Run Code Online (Sandbox Code Playgroud)

或更改实现以将 存储inquiryRequest.getPin()在变量中,应该会让您更进一步。