【问题标题】:Java.lang.NullPointerException what's wrongJava.lang.NullPointerException 怎么了
【发布时间】:2017-10-09 04:32:19
【问题描述】:

它说这个方法中的错误是一个空指针异常

   @Test
     public void showBookListPage() throws Exception {

         List<Book> expectedBookList =  bookService.findAll();
                 BookService bookService = mock(BookService.class);

            when( bookService.findAll()).thenReturn(expectedBookList);

         BookController bookController = new BookController(bookService);
         MockMvc mockMvc = standaloneSetup(bookController).build();

         mockMvc.perform(get(" /book/bookList"))
         .andExpect(view().name("bookList"))
         .andExpect(model().attributeExists("bookList"))
         .andExpect(model().attribute("bookList", hasItems(expectedBookList.toArray())));
     }
}

除此之外,一切似乎都是正确的

这是我在调用之前先模拟图书服务后得到的错误

java.lang.IllegalStateException: missing behavior definition for the preceding method call:
BookService.findAll()
Usage is: expect(a.foo()).andXXX()

    at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:42)
    at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:94)
    at com.sun.proxy.$Proxy134.findAll(Unknown Source)
    at com.admintest.controller.BookControllerTest.showBookListPage(BookControllerTest.java:101)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.springf

这是我对测试方法的修改 @测试 public void showBookListPage() 抛出异常 {

        BookService bookService = mock(BookService.class);
        List<Book> expectedBookList = bookService.findAll();
        when(bookService.findAll()).thenReturn(expectedBookList);

        BookController bookController = new BookController(bookService);
        MockMvc mockMvc = standaloneSetup(bookController).build();

        mockMvc.perform(get(" /book/bookList"))
                .andExpect(view().name("bookList"))
                .andExpect(model().attributeExists("bookList"))
                .andExpect(model().attribute("bookList", hasItems(expectedBookList.toArray())));
}

顺便说一句,这是控制器

 @RequestMapping("/bookList")
    public String bookList(Model model) {
        List<Book> bookList = bookService.findAll();
        model.addAttribute("bookList", bookList);
        return "bookList";

    }

【问题讨论】:

  • 我们应该猜测这个 NullPointerException 是在哪里抛出的?请同时发布异常的堆栈跟踪。对我来说,第一行可能会抛出 NullPointerException,因为您试图在 bookService 上调用 findAll() 方法,该方法在调用后被模拟。
  • 我添加了错误@Kamil

标签: spring mocking


【解决方案1】:

您必须在使用 bookService 之前对其进行模拟。不是在它使用之后。 @BeforeMethod 中对 bookService 的模拟也是如此

【讨论】:

  • 正如异常所说,您需要在之前添加行为。意思是,when() 语句应该在使用 bookService.findall() 之前定义
  • 但是我返回的值是预期的 Book list 在图书服务中找到。find All 有一个错误,因为我在初始化之前使用它@pavan
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
  • 2015-06-29
  • 2012-09-05
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多