我使用groovy和junit編寫單元測試。我寫了一個方法testBrandIDParam
來測試一些常見的情況,如null
參數值或paramID < 0
使用反射。但是,當我測試null
參數時,此方法並不總是有效。我怎麼解決這個問題?如何使用groovy中的反射調用具有null參數值的方法?
@Test
public void testGetDetailBrand() {
GetDetailReqDTO reqDTO = new GetDetailReqDTO();
testBrandIDParam(reqDTO, service, "getDetailBrand");
}
private <T> void testBrandIDParam(T requestDTO, Service service, String testMethod) {
Class requestClazz = requestDTO.getClass();
Class serviceClazz = service.getClass();
java.lang.reflect.Method doTestMethod = serviceClazz.getMethod(testMethod, requestDTO.class);
// test null
CommonRespDTO respDTO = doTestMethod.invoke(service,{null });
Assert.assertTrue(respDTO.getRespCode() == ICommonRespDTO.ResponseCode.FAIL.getCode());
T reqInstance = (T) requestClazz.newInstance();
// req-ID = 0
respDTO = (CommonRespDTO) doTestMethod.invoke(service, reqInstance)
Assert.assertTrue(!respDTO.isSuccess());
brandIDField.setAccessible(false);
}
注:getDetailBrand()
只有一個參數,brandID
。
CommonRespDTO respDTO = doTestMethod.invoke(service,{null });
拋出java.lang.IllegalArgumentException: argument type mismatch
CommonRespDTO respDTO = doTestMethod.invoke(service,new Object[1]{ null });
拋出groovy.lang.MissingMethodException: No signature of method: [Ljava.lang.Object;.call() is applicable for argument types: (service.serviceTest$_testBrandIDParam_closure1) values: [[email protected]]
Possible solutions: tail(), wait(), any(), max(), last(), wait(long)CommonRespDTO respDTO = doTestMethod.invoke(service,new Object[1]{ null });
產生編譯錯誤:new Objecy[] cannot be applied to groovy.lang.Closure
很難說出你在問什麼,但我最好的猜測是你使用Java數組語法'{}'而不是'[]'爲Groovy。 – chrylis
如何在groovy中使用null參數調用方法? –