我正在使用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
,这只包含OR
和AND
两个成员switch
声明。
有人可以帮助我如何进行这项测试。
由于
答案 0 :(得分:1)
枚举变量可以为null。 getCondition()
方法返回null。为什么它返回null,如果没有看到你没有向我们展示过的代码,我们就无法猜测。
答案 1 :(得分:0)
如果getCondition()是私有方法,则无法模拟它。如果它是公共方法,你可以模拟它,或者如果你有setCondition,你可以直接设置ENUM。
假设您使用的是Mockito或PowerMock或EasyMock,您可以使用类似
的内容when(postProcessFilter.getCondition()).thenReturn(Enum.OR);