Mockito测试方法参数

时间:2016-06-10 16:06:57

标签: spring-boot mockito junit4

我已经开始使用mockito进行测试。我有两个问题......

1。问题

我有类似下面的方法可选,并且必须有参数所以当我调用这个没有必需参数的服务方法时,它应该抛出异常。

@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:

2。问题:

在上面的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异常。

1 个答案:

答案 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