当我返回 null 时 assertEquals 失败

assertEquals Fails when I'm returning null

我正在尝试实现 Mockito 来测试特定方法,但是 .thenReturn(null) 似乎没有返回空值。

@RunWith(PowerMockRunner.class)
@PrepareForTest({ ValidationServiceImpl.class})
public class ValidationServiceTest {

    @Test
    public void testGetProdList() throws Exception{
        IValidationDao validationDao = Mockito.mock(ValidationDaoImpl.class);
        IValidationService validationService = Mockito.mock(ValidationServiceImpl.class);
        ReflectionTestUtils.setField(validationService, "validationDao", validationDao);
        List<ProductDetailsBean> prodGroups = new  ArrayList<ProductDetailsBean>();
        for (int i = 0; i < 145; i++) 
            prodGroups.add(new ProductDetailsBean());
        Mockito.when(validationDao.getProdList(12345)).thenReturn(prodGroups);
        assertNotEquals(null, validationService.getProdList(12345));
    }

    @Test
    public void testGetProdListwithNullTest() throws Exception{
        IValidationDao validationDao = Mockito.mock(ValidationDaoImpl.class);
        IValidationService validationService = Mockito.mock(ValidationServiceImpl.class);
        ReflectionTestUtils.setField(validationService, "validationDao", validationDao);
        Mockito.when(validationDao.getProdList(11111)).thenReturn(null);
        assertEquals(null, validationService.getProdList(11111));
    }   
}

我的第一个测试用例工作正常,第二个失败了..

堆栈跟踪:

java.lang.AssertionError: expected:<null> but was:<[]>
    at org.junit.Assert.fail(Assert.java:88)
    at org.junit.Assert.failNotEquals(Assert.java:743)
    at org.junit.Assert.assertEquals(Assert.java:118)
    at org.junit.Assert.assertEquals(Assert.java:144)
    at uk.co.argos.pst.test.sevices.ValidationServiceTest.testGetProdListwithNullTest(ValidationServiceTest.java:53)

哪里做错了请大家指点。

您正在模拟 ValidationServiceImpl,因此它 returns 是 getProdList 的默认模拟值,这是一个空列表。您的基础模拟 IValidationDao 从未真正被调用过。

您可以模拟调用:

Mockito.when(validationService.getProdList(11111)).thenReturn(null);

但是你没有测试任何代码。

使用真实的ValidationServiceImpl。而不是嘲笑:

IValidationService validationService = Mockito.mock(ValidationServiceImpl.class);
ReflectionTestUtils.setField(validationService, "validationDao", validationDao);

构建真实实例:

IValidationService validationService = new ValidationServiceImpl();
validationService.setValidationDao(validationDao);