春天顶部

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

>>学习春天

1.概述

在此快速教程中,我们将注意三种不同的方式创建模拟对象以及它们如何彼此不同 - 模仿和春季嘲笑支持。

进一步阅读:

Mockito ArgumentMatchers.

了解如何使用ArgumentMatcher以及它与ArgumentCaptor的不同之处。

使用mockito嘲笑异常

学习如何在Mockito中配置方法调用以抛出异常。

2。mockito.mock()

mockito.mock()方法允许我们创建类或接口的模拟对象。

然后,我们可以使用模拟返回值的方法,并验证是否调用它们。

让我们来看看一个例子:

@test public vioid givencountmethodmocked_whencountinvoked_thenmockedvaluereturned(){userrepository localmockrepository = mockito.mock(userrepository.class);Mockito.When(localMockRepository.Count())。然后(111L);long usercount = localmockrepository.count();assert.assertequals(111l,usercount);mockito.verify(localMockRepository).count();}

这个方法在使用之前不需要做任何其他事情。我们可以使用它在方法中创建模拟类字段和局部模拟。

3. Mockito的@嘲笑注解

这个注释是一个速记mockito.mock()方法。同样,我们应该只在测试类中使用它。不像嘲笑()方法,我们需要启用Mockito注释来使用此注释。

我们可以通过使用它来完成这一点MockitoJUnitRunner运行测试或呼叫Mockitoannotations.initmocks()方法明确。

让我们来看看一个例子MockitoJUnitRunner

@runwith(mockitojunitrunner.class)public类mockannotationunittest {@mock userrepository mockRepository;@test public vivencountmethodmocked_whencountinvoked_thenmockvaluereturned(){mockito.when(mockrepository.count())。然后return(123l);long usercount = mockrepository.count();assert.asstequals(123l,usercount);mockito.verify(模型).count();}}

除了使代码更可读,@嘲笑如果发生故障,更容易找到问题模拟,因为字段的名称出现在失败消息中:

需要但未调用:mockRepository.count();实际上,与这个moc金宝搏188体育k的交互是零的。org.bae金宝搏188体育ldung.MockAnnotationTest.testMockAnnotation (MockAnnotationTest.java: 22)

另外,与之结合使用时@injectmocks.,它可以显着减少设置代码的量。

4.春靴子@MockBean.注解

我们可以使用@MockBean.将模拟对象添加到Spring应用程序上下文中。模拟将在应用程序上下文中替换相同类型的任何现有bean。

如果定义了相同类型的bean,则将添加新的。此注释对于特定bean - 例如外部服务的集成测试非常有用 - 需要嘲笑。

要使用这个注释,我们必须使用Springrunner.要运行测试:

@runwith(springrunner.class)public类mockbeanannotation integrationtest {@mockbean userrepository mockrepository;@Autowired ApplicationContext上下文;@test public vivencountmethodmocked_whencountinvoked_thenmockvaluereturned(){mockito.when(mockrepository.count())。然后return(123l);UserRepository userRepofromContext = Context.getBean(UserRepository.class);long usercount = userrepofromcontext.count();assert.asstequals(123l,usercount);mockito.verify(模型).count();}}

当我们在字段上使用注释时,以及在应用程序上下文中注册时,模拟也将注入该字段。

这在上面的代码中是显而易见的。在这里,我们使用了注射的UserRepository.嘲笑来捣碎数数方法然后,我们从应用程序上下文中使用了bean来验证它确实是嘲笑的bean。

结论

在本文中,我们看到了三种方法如何创建模拟对象的不同以及如何使用。

本文附带的源代码是可用的在GitHub

春天底

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

>>课程
2评论
最古老的
最新的
内联反馈
查看所有评论
评论在本文上关闭!