1.介绍

在这篇简短的文章中,我们将展示如何将Mockito与JUnit 5扩展模型集成。要了解关于JUnit 5扩展金宝搏官网188be模型的更多信息,请查看下面的内容文章

首先,我们将展示如何创建一个扩展,该扩展可以自动为任何带注释的类属性或方法参数创建模拟对象@Mock

然后,我们将在JUnit 5测试类中使用我们的Mockito扩展。

2.Maven的依赖关系

2.1。所需的依赖项

让我们添加JUnit 5 (jupiter)和5依赖我们pom.xml:

<依赖> < groupId > org.junit。 junit-jupiter-engine< artifactId> 5.3.1 test   org. >mockitto    2.21.0 test 

请注意,junit-jupiter-engine是主要的JUnit 5库,以及junit-platform-launcher与Maven插件和IDE启动器一起使用。

2.2。成功的插件

让我们配置Maven Surefire插件,使用新的JUnit平台启动器运行我们的测试类:

 maven-surefire-plugin 2.19.1   org.junit。平台 junit-platform-surefire-provider 1.0.1   

2.3。JUnit 4 IDE兼容性依赖项

为了我们的测试用例是JUnit4兼容的,对于那些还不支持junit5的ide,让我们包括这些依赖:

<依赖> < groupId > org.junit。平台 junit-platform-runner 1.2.0 test   org.junit。 junit-vintage-engine< artifactId> 5.2.0 test 

同样,我们应该考虑用@RunWith (JUnitPlatform.class)

最新版本的junit-jupiter-engine,junit-vintage-engine,junit-platform-launcher,mockito-core可以从Maven Central下载。

3.5扩展

5在库中提供了JUnit5扩展的实现mockito-junit-jupiter。我们将在pom.xml:

<依赖> < groupId > org。5 mockito-junit-jupiter 2.23.0 test 

4.构建测试类

让我们构建我们的测试类,并将Mockito扩展附加到它:

@RunWith(JUnitPlatform.class) public class UserServiceUnitTest {UserService UserService;…/ /}

我们可以使用@Mock注释注入一个实例变量的mock,我们可以在测试类的任何地方使用:

@Mock UserRepository UserRepository;

同样,我们可以将模拟对象注入方法参数中:

@BeforeEach void init(@Mock SettingRepository SettingRepository) {userService = new DefaultUserService(userRepository, SettingRepository, mailClient);Mockito.lenient()当(settingRepository.getUserMinAge ()) .thenReturn (10);当(settingRepository.getUserNameMinLength ()) .thenReturn (4);Mockito.lenient()当(userRepository.isUsernameAlreadyExists(任何(String.class))) .thenReturn(假);}

请注意使用Mockito.lenient ()在这里。5抛出一个UnsupportedStubbingException,当初始化的mock在执行期间没有被测试方法之一调用时。我们可以通过在初始化模拟时使用此方法来避免这种严格的存根检查。

我们甚至可以将模拟对象注入到测试方法参数中:

@Test void givenValidUser_whenSaveUser_thenSucceed(@Mock MailClient MailClient){//给定用户=新用户(“Jerry”,12);当(userRepository.insert(任何(User.class)))。then(new Answer() {int sequence = 1;@Override public User answer(InvocationOnMock调用)throws Throwable {User User = (User)调用。getargument (0);user.setId序列(+ +);返回用户;}});userService = new DefaultUserService(userRepository, settingRepository, mailClient);//当User insertedUser = userService.register(User);/ /然后验证(userRepository) .insert(用户);Assertions.assertNotNull (user.getId ()); verify(mailClient).sendUserRegistrationMail(insertedUser); }

请注意,MailClient对象中注入的实例将不会是相同的初始化方法。

5.结论

Junit 5为扩展提供了一个很好的模型。我们演示了一个简单的Mockito扩展,它简化了模拟创建逻辑。

控件中可以找到本文中使用的所有代码com.金宝搏188体育baeldung.junit5.mockito包的GitHub项目,以及一些额外的单元测试方法。

通用的底部

开始使用Spring 5和Spring Boot 2,通过学习的春天课程:

>>看看这个课程
对这篇文章的评论关闭!