建设部网站实名制举报,wordpress维护插件,wap游戏入口,珠海手机网站spock 集成测试了解如何利用Spock 1.2切片传统应用程序的Spring上下文#xff0c;编写集成测试。 您是否曾经想过#xff0c;要开始使用一些遗留应用程序#xff0c;编写一些测试以了解正在发生的事情#xff0c;并可能收到有关回归的通知#xff1f; 当您想实例化单个类时… spock 集成测试 了解如何利用Spock 1.2切片传统应用程序的Spring上下文编写集成测试。 您是否曾经想过要开始使用一些遗留应用程序编写一些测试以了解正在发生的事情并可能收到有关回归的通知 当您想实例化单个类时这种感觉会因NullPointerException而失败。 6替换有困难依赖项之后您以前从未听说过的类仍然存在一些错误。 听起来很熟悉 有多种技术可以处理隐藏的依赖项。 有整本专门的书可能还有一些我还没有读过的书。 有时从集成测试开始并执行某些过程可能是可行的。 即使只是在我们的案例中完全不需要查看仅设置上下文所需要的奇特组件也可能更“有趣”。 谢谢太宽和粗心使用 ComponentScan :)。 在测试环境中注入存根/模拟是一种作为紧急援助的方式请参阅最后一段有更好但更难的方法。 我们可以通过一个额外的带有Primary批注的bean定义来“手动”实现通常是在这样做之前要三思而后行的原因这是针对我们想要削减的每个依赖项或实例化的每个不需要的bean的顺便说说。 MockBean放在测试中的某个字段上更方便但是仍然需要在我们的测试中定义一个字段并在其上添加批注51015 bean。 Spock 1.2引入了某种StubBeans功能 StubBeans在这里可能有用。 它可以用来简单地提供一个类列表这些类可能应在Spring测试上下文中用存根替换。 当然在实例化实际对象之前例如防止在构造函数中使用NPE。 多亏了这几行存根/模拟注入 RunWith(SpringRunner.class) //Spring Boot Mockito
SpringBootTest //possibly some Spring configuration with ComponentScan is imported in this legacy application
public class BasicPathReportGeneratorInLegacyApplicationITTest { //usual approachMockBeanprivate KafkaClient kafkaClientMock;MockBeanprivate FancySelfieEnhancer fancySelfieEnhancerMock;MockBeanprivate FastTwitterSubscriber fastTwitterSubscriberMock;MockBeanprivate WaterCoolerWaterLevelAterter waterCoolerWaterLevelAterterMock;MockBeanprivate NsaSilentNotifier nsaSilentNotifierMock;//a few more - remember, this is legacy application, genuine since 1999 ;)//...Autowiredprivate ReportGenerator reportGenerator;Testpublic void shouldGenerateEmptyReportForEmptyInputData() {...}
} 可以只替换为一长行 SpringBootTest //possibly some Spring configuration with ComponentScan is imported in this legacy application
StubBeans([KafkaClient, FancySelfieEnhancer, FastTwitterSubscriber, WaterCoolerWaterLevelAterter, NsaSilentNotifier/(, ... */])//all classes of real beans which should be replaced with stubs
class BasicPathReportGeneratorInLegacyApplicationITSpec extends Specification {Autowiredprivate ReportGenerator reportGeneratordef should generate empty report for empty input data() {....}
} 使用Spock 1.2-RC2测试 值得一提的是StubBeans仅用于提供占位符。 在某种情况下需要提供存根和/或调用验证SpringBean或SpringSpy 在Spock 1.2中也引入了更好。 我在以前的博客文章中写了更多有关它的内容 。 有一个重要方面要强调 。 StubBeans在我们有一些“遗留”项目并希望快速开始编写集成回归测试以查看结果的情况下很方便使用。 但是正如我的一位同事DarekKaczyński的总结所概括的那样盲目更换在测试中“爆炸”的豆仅仅是“扫除地毯下的问题”。 在初始阶段之后当我们开始了解正在发生的事情时是重新考虑在生产环境和测试环境中创建上下文的好时机。 已经提到过的ComponentScan太宽泛通常是万恶之源。 设置部分上下文并将其放在一起如果需要的能力是一个很好的起点。 使用Profile或条件Bean是测试中非常强大的机制不仅限于此。 TestConfiguration和适当的bean选择以改善上下文缓存是值得牢记的。 但是我从本文开始介绍了Spock中的新机制该机制在某些情况下可能会有用并且我想使其简短。 可能还有另一篇更通用的博客文章关于在集成测试中管理Spring上下文。 我必须认真对待它:)。 翻译自: https://www.javacodegeeks.com/2018/09/integration-testing-legacy-application-spock-1-2.htmlspock 集成测试