【问题标题】:Always return NullPointerException in array list when mocking in controller在控制器中模拟时总是在数组列表中返回 NullPointerException
【发布时间】:2020-08-07 04:17:25
【问题描述】:

我尝试在控制器中使用 JUnit 和 Mockito 进行简单的单元测试。我嘲笑了该服务,因为它将被控制器调用。 这是代码

@RunWith(MockitoJUnitRunner.class)
class MsCustomerControllerTest {
    
    @Mock
    MsCustomerService customerServiceMock;

    
    @InjectMocks
    MsCustomerController customerController;
    
    @Test
    void test() {
        fail("Not yet implemented");
    }
    

    
    @Test
    public void findAllCustomerTest() {
        
        List<MsCustomer> listCustomer = new ArrayList<MsCustomer>();
        listCustomer.add(new MsCustomer(1, "Rosa", "Titian Indah", LocalDateTime.now()));
        listCustomer.add(new MsCustomer(2, "Rosa2", "Titian Indah2", LocalDateTime.now()));
        when(customerServiceMock.findAllCustomer()).thenReturn(listCustomer);
        
        ResponseEntity response = new ResponseEntity(listCustomer, HttpStatus.OK);
        
        
        assertEquals(response, customerController.findAllCustomer());
    }

}

注意:customerController 也返回响应实体,因此也使用响应实体断言。

这是结果

我尝试了其他方法,它也给了我 NullPointerException。

【问题讨论】:

  • 能否分享您的 MsCustomerController 代码?

标签: java spring-boot web-services junit mockito


【解决方案1】:

尝试添加一个 init 方法并使用@BeforeEach 对其进行注释。 然后在方法中添加MockitoAnnotations.initMocks(this);,它会初始化使用 Mockito 注释注释的字段。

@RunWith(MockitoJUnitRunner.class)
class MsCustomerControllerTest {
    
    @Mock
    MsCustomerService customerServiceMock;

    
    @InjectMocks
    MsCustomerController customerController;

    @BeforeEach
    void initMock() {
        MockitoAnnotations.initMocks(this);
    }
    
    @Test
    void test() {
        fail("Not yet implemented");
    }
    

    
    @Test
    public void findAllCustomerTest() {
        
        List<MsCustomer> listCustomer = new ArrayList<MsCustomer>();
        listCustomer.add(new MsCustomer(1, "Rosa", "Titian Indah", LocalDateTime.now()));
        listCustomer.add(new MsCustomer(2, "Rosa2", "Titian Indah2", LocalDateTime.now()));
        when(customerServiceMock.findAllCustomer()).thenReturn(listCustomer);
        
        ResponseEntity response = new ResponseEntity(listCustomer, HttpStatus.OK);
        
        
        assertEquals(response, customerController.findAllCustomer());
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 2011-02-07
    • 2017-09-03
    • 2022-01-12
    • 2020-04-29
    相关资源
    最近更新 更多