java - 当我返回 null 时,assertEquals 失败

标签 java junit mockito powermock

我正在尝试实现 Mockito 来测试特定方法,但 .thenReturn(null) 似乎没有返回 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,因此它返回 getProdList 的默认模拟值,这是一个空列表。您的底层模拟 IValidationDao 从未真正被调用。

您可以模拟调用:

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

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

使用真正的ValidationServiceImpl。而不是 mock :

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

构造一个真实的实例:

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

关于java - 当我返回 null 时,assertEquals 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31268931/

相关文章:

java - 为什么 Java 内存转储分析器中的 Heap total 与内存设置和 JVM 使用总量不对应?

java - 中间用哪个方法终止Java程序的执行?

java - (java.lang.NoSuchMethodError) IntelliJ 中的 java.nio.file.Files.lines(Ljava/nio/file/Path;)

java - PowerMockito.whenNew 不工作

java - Powermock mockstatic 不能继承最终类

java - 如何使用 Mockito 验证是否记录了错误消息?

java - Mockito 何时/然后不返回预期值

java - 如何编写在代码覆盖期间覆盖 catch block 的 Junit 测试用例?

java - 使用 JDBC 设置高 maxPoolSize 时需要注意哪些风险/因素

java - jsfunit 与 junit 4