Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mockito thenstrow()错误_Java_Spring_Spring Mvc_Junit - Fatal编程技术网

Java Mockito thenstrow()错误

Java Mockito thenstrow()错误,java,spring,spring-mvc,junit,Java,Spring,Spring Mvc,Junit,我正在使用spring开发一个简单的Restful api,并尝试遵循TDD模型。我有一个BookController,它按细节返回书籍。它在控制器内部有一个服务调用,我在测试类中模拟了它 @Autowired BookService bookService; @RequestMapping(value = "/books/getDetails/{bookName}", method = RequestMethod.GET) @ResponseStatus(HttpStatus.OK) @R

我正在使用spring开发一个简单的Restful api,并尝试遵循TDD模型。我有一个BookController,它按细节返回书籍。它在控制器内部有一个服务调用,我在测试类中模拟了它

 @Autowired
BookService bookService;

@RequestMapping(value = "/books/getDetails/{bookName}", method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public ResponseEntity<Books> getBooksDetailsByName(@PathVariable(value = "bookName") String bookName){

    try {
        Books resultBooks = bookService.findBookByName(bookName);
        if (resultBooks != null) {
            return new ResponseEntity<>(resultBooks, HttpStatus.OK);
        } else {
            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
        }
    }
    catch(Exception e){
            throw new RuntimeException();
        }
}
@Autowired
图书服务;
@RequestMapping(value=“/books/getDetails/{bookName}”,method=RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
@应答器
public ResponseEntity getBooksDetailsByName(@PathVariable(value=“bookName”)字符串bookName){
试一试{
Books resultBooks=bookService.findBookByName(bookName);
if(resultBooks!=null){
返回新的ResponseEntity(resultBooks,HttpStatus.OK);
}否则{
返回新的ResponseEntity(未找到HttpStatus.NOT_);
}
}
捕获(例外e){
抛出新的RuntimeException();
}
}
而且测试看起来

 @Test(expected = Exception.class)
public void getBookDetails_shouldReturn500() throws Exception {
    String bookName = "First";
    //System.out.println("hello1");
    when(bookService.findBookByName(any())).thenThrow(new Exception());
    //System.out.println("hello2");
    ResponseEntity<Books> responseEntity = bookController.getBooksDetailsByName(bookName);
    //System.out.println("hello3");
    Assert.assertTrue(responseEntity.getStatusCode().is2xxSuccessful());
    //System.out.println("hello4");
}
@Test(预期为异常.class)
public void getBookDetails\u shouldReturn500()引发异常{
字符串bookName=“First”;
//System.out.println(“hello1”);
when(bookService.findBookByName(any())。然后throw(newexception());
//System.out.println(“hello2”);
ResponseEntity ResponseEntity=bookController.GetBookDetailsByName(bookName);
//System.out.println(“hello3”);
Assert.assertTrue(responseEntity.getStatusCode().is2xxSuccessful());
//System.out.println(“hello4”);
}

当我运行或调试测试用例时,它不会在When()之后运行。在上面的代码中,如果我指定最后一条打印的语句,它将是hello1。不管是is2xx还是is5xx,测试用例都会通过。请帮我理解这个问题

错误是什么?这个问题间接地回答了你的问题。您需要添加一种方法,向
BookRepository
类提供
BookService
的模拟实现。我已经使用@mock annotation和调用when()模拟了BookService。Thenthow()帮助我实现了这一点。@Compass Error是我的测试用例在状态代码(200或500)的情况下成功运行。相反,它应该让其中一个失败。如果未注释,则应打印其他打印语句(hello2、hello3、hello4)。这两件事都没有发生。您是否尝试过在
when(bookService.findBookByName(any()).thenthow(newexception())以查看实际引发的异常?