使用以下语句时,我得到的Matchers无效使用异常。 Mockito.when(CrossSellOffersRetrievalService.isHourInInterval(Mockito.anyString(),Mockito.anyString(),Mockito.anyString()))。thenReturn(true);
如何避免这种异常?
class:
@Component
public class CrossSellOffersRetrievalService {
@Autowired
private CrossSellOffersRetrieval crossSellOffersRetrieval;
public List<CrossSellOffer> getapplicableOffers(String channelId,String customerId,String cinSuffix,String countryCode,String interactionPoint,String sessionId,Integer numberOfOffers)throws CrossSellOffersException {
if (isOnLineserverTime()) {
if (numberOfOffers == null) {
numberOfOffers = 1;
}
List<CrossSellOffer> crossSellOffersList = crossSellOffersRetrieval.getapplicableOffers(channelId,customerId,cinSuffix,countryCode,interactionPoint,sessionId,numberOfOffers);
return crossSellOffersList;
} else {
throw new CrossSellOffersException(Constants.ERROR_CODE,Constants.WRONG_SERVER_TIME);
}
}
public static boolean isHourInInterval(String target,String start,String end) {
return ((target.compareTo(start) >= 0) && (target.compareTo(end) <= 0));
}
public boolean isOnLineserverTime() {
String serverTime = DateTimeFormatter.ofPattern("HH.mm").format(LocalDateTime.now(ZoneId.of("Asia/Singapore")));
boolean value = isHourInInterval(serverTime,"08.00","23.15");
return value;
}
}
Junit测试类:
@RunWith(MockitoJUnitRunner.class)
public class CrossSellOffersRetrievalServiceTest {
@InjectMocks
private CrossSellOffersRetrievalService crossSellOffersRetrievalService;
@Mock
private CrossSellOffersRetrieval crossSellOffersRetrieval;
@Test
public void getapplicableOffersTest() throws CrossSellOffersException {
Mockito.when(CrossSellOffersRetrievalService.isHourInInterval(Mockito.anyString(),Mockito.anyString(),Mockito.anyString())).thenReturn(true);
Mockito.when(crossSellOffersRetrieval.getapplicableOffers(Mockito.anyString(),1)).thenReturn(CrossSellOffersRetrievalHandlerTest.sampleCrossSellOffersList());
List<CrossSellOffer> crossSellOffersList = crossSellOffersRetrievalService.getapplicableOffers("MBSG","S7754061Z","00","SG","NEW_CC_ADDON","IBOXS007",1);
}
}
输出:
org.mockito.exceptions.misusing.InvalidUseOfmatchersException:
Misplaced or misused argument matcher detected here:
-> at com.dbs.crossselloffers.offers_retrieval.CrossSellOffersRetrievalServiceTest.getapplicableOffersTest(CrossSellOffersRetrievalServiceTest.java:12)
-> at com.dbs.crossselloffers.offers_retrieval.CrossSellOffersRetrievalServiceTest.getapplicableOffersTest(CrossSellOffersRetrievalServiceTest.java:12)
-> at com.dbs.crossselloffers.offers_retrieval.CrossSellOffersRetrievalServiceTest.getapplicableOffersTest(CrossSellOffersRetrievalServiceTest.java:12)
You cannot use argument matchers outside of verification or stubbing.
Examples of correct usage of argument matchers:
when(mock.get(anyInt())).thenReturn(null);
doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject());
verify(mock).someMethod(contains("foo"))