我已经开始使用mockito进行测试。我有两个问题......
我有类似下面的方法可选,并且必须有参数所以当我调用这个没有必需参数的服务方法时,它应该抛出异常。
@RequestMapping( method=RequestMethod.GET, produces={"application/xml", "application/json"})
public ResponseEntity<PResponse> get(@RequestParam(value="params1",required=false) String params1,
@RequestParam(value ="params2",required=false) String params2,
@RequestParam(value= "params3",required=true) String params3,
@RequestParam(value="refresh",required=false) boolean refresh,
@RequestParam(value="params4",required=true) List<String> params4)
{method logic ...}
此处params1,2,refresh
是可选的,params3,4
是必须的,因此当我收到params3,4
的请求时,它应该会出错。我正在尝试使用mockito
@Test(expected = RuntimeException.class)
public void throwExceptionIfMissingParams34() throws RuntimeException {
when(myService.get(argThat(new MessagesArgumentMatcher()))).thenThrow(new RuntimeException()) ;
}
我收到错误get() in myService can't be applied to expected Parameters:, Actual Arguments:
在上面的get方法中,我调用其他方法调用其他服务方法从DB获取数据
List<Product> lstProduct = productComponent.readProduct(params3,params4);
调用
Product product = productReader.readProduct(params3, params4, Product.class);
在ProductReader.java Service类中,它通过运行查询从DB获取数据。我正在尝试测试
列出lstProduct = productComponent.readProduct(params3,params4);
在get()
方法中,所以我尝试模拟服务对象,但在运行测试时得到NullPointer异常。
答案 0 :(得分:0)
广告1.问题
[Authorize]
[RoutePrefix("api/Announce")]
public class AnnouncementController : ApiController
{
// GET api/<controller>
[Route("GetData")]
[HttpGet]
public List<EAnnouncement> Get(string code)
{
return AnnouncementC.getdata(code);
}
[Route]
[HttpPost]
public void Post(EAnnouncement announcement)
{
AnnouncementC.insert(announcement);
}
}
是Spring Framework的注释。它用于定义控制器的参数。 Spring使用注释将Web请求参数映射到控制器接受的参数。测试这种行为实际上是测试Spring本身。我不会这样做。另一件事是,你真的在测试一个服务,还是一个控制器?
此外,Java没有可能调用具有不同于定义的参数的方法,唯一的可能是使用varargs。
广告。问题2
您没有指定获得NPE的表格。但第一个猜测是你没有正确配置Mockito。例如,请查看:NullPointerException in mockito unit test