复杂的JUnit测试用例

时间:2016-02-02 16:10:21

标签: java junit

我正在使用JUnit编写一个测试用例,该方法在switch语句中使用ENUM。 这是要测试的方法。

public <T extends BaseServiceResponse> T postProcess(T response,
        ClientResponse clientResponse) throws EISClientException {  

    List<Message> messages = response.getMessages();
    if(messages==null || messages.size()==0) {
        return response;
    }

    Map<String, Message> messagesMap = populateMessages(response.getMessages());
    ConditionOperator condition = getCondition();

    switch(condition) {
        case OR:
            checkORCondition( messagesMap );
            break;
        case AND:
            checkANDCondition( messagesMap );
            break;
    }       
    return response;
}   

到目前为止我所做的是:

@Test
public void testPostProcess() throws Exception {
    clientResponse = mock(ClientResponse.class);

    RetrieveBillingServiceResponse response = new RetrieveBillingServiceResponse();
    BillingOverview billingOverView = new BillingOverview();

    Message message = new Message();
    message.setMessageCode("200");
    message.setMessageType(MessageTypeEnum.MESSAGE_TYPE_INFO);
    message.setMessageText("Service completed successfully");

    response.setEntity(billingOverView);
    response.setMessages(Arrays.asList(message));

    MessageToExceptionPostProcessFilter postProcessFilter = new MessageToExceptionPostProcessFilter();
    RetrieveBillingServiceResponse serviceResponse = postProcessFilter.postProcess(response, clientResponse);

    assertEquals("200", serviceResponse.getMessages().get(0).getMessageCode());

我为NullPointerException类型的conditonOperator获取了ENUM,这只包含ORAND两个成员switch声明。 有人可以帮助我如何进行这项测试。

由于

2 个答案:

答案 0 :(得分:1)

枚举变量可以为null。 getCondition()方法返回null。为什么它返回null,如果没有看到你没有向我们展示过的代码,我们就无法猜测。

答案 1 :(得分:0)

如果getCondition()是私有方法,则无法模拟它。如果它是公共方法,你可以模拟它,或者如果你有setCondition,你可以直接设置ENUM。

假设您使用的是Mockito或PowerMock或EasyMock,您可以使用类似

的内容
when(postProcessFilter.getCondition()).thenReturn(Enum.OR);