使用Mockito匹配Null

2023/06/27

1. 概述

在这个简短的教程中,我们将使用Mockito检查null是否作为参数传递给方法。我们将看到如何直接匹配null并使用ArgumentMatchers

2. 示例设置

首先,让我们创建一个简单的Helper类,其中包含一个单独的concat()方法,返回两个String的拼接

class Helper {

    String concat(String a, String b) {
        return a + b;
    }
}

现在我们将添加一个Main类,它的方法methodUnderTest()调用concat()以将字符串Tuyucheng与null拼接起来:

class Main {

    Helper helper = new Helper();

    String methodUnderTest() {
        return helper.concat("Tuyucheng", null);
    }
}

3. 只使用精确值

让我们设置测试类:

class MainUnitTest {

    @Mock
    Helper helper;

    @InjectMocks
    Main main;

    @BeforeEach
    void openMocks() {
        MockitoAnnotations.openMocks(this);
    }

    // Add test method
}

得益于@Mock,我们创建了一个mock的Helper。然后我们通过@InjectMocks将它注入到我们的Main实例中。最后,我们调用MockitoAnnotations.openMocks()来启用Mockito注解。

我们的目标是编写一个单元测试来验证methodUnderTest()委托给concat()。此外,我们要确保第二个参数为null。让我们保持简单并检查调用的第一个参数是Tuyucheng而第二个参数是null:

@Test
void whenMethodUnderTest_thenSecondParameterNull() {
    main.methodUnderTest();
    Mockito.verify(helper)
        .concat("Tuyucheng", null);
}

我们调用Mockito.verify()来检查参数值是否符合预期。

4. 使用匹配器

现在,我们将使用Mockito的ArgumentMatchers来检查传递的值。由于第一个值与我们的示例无关,我们将使用any()匹配器:因此,任何输入都将通过。要检查第二个参数是否为null,我们可以简单地使用isNull():

@Test
void whenMethodUnderTest_thenSecondParameterNullWithMatchers() {
    main.methodUnderTest();
    Mockito.verify(helper)
        .concat(any(), isNull());
}

5. 总结

在本文中,我们学习了如何使用Mockito验证传递给方法的参数是否为null,我们通过检查精确值和使用ArgumentMatchers来做到这一点。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章