spock 集成测试_使用Spock 1.2简化对遗留应用程序的集成测试
spock 集成測試
了解如何利用Spock 1.2切片傳統應用程序的Spring上下文,編寫集成測試。
您是否曾經想過,要開始使用一些遺留應用程序,編寫一些測試以了解正在發生的事情,并可能收到有關回歸的通知? 當您想實例化單個類時,這種感覺會因NullPointerException而失敗。 6替換(有困難)依賴項之后,您以前從未聽說過的類仍然存在一些錯誤。 聽起來很熟悉?
有多種技術可以處理隱藏的依賴項。 有整本專門的書(可能還有一些我還沒有讀過的書)。 有時,從集成測試開始并執行某些過程可能是可行的。 即使只是在我們的案例中完全不需要,查看僅設置上下文所需要的奇特組件也可能更“有趣”。 謝謝(太寬和粗心使用) @ComponentScan :)。
在測試環境中注入存根/模擬是一種作為緊急援助的方式(請參閱最后一段,有更好但更難的方法)。 我們可以通過一個額外的帶有@Primary批注的bean定義來“手動”實現(通常是在這樣做之前要三思而后行的原因),這是針對我們想要削減的每個依賴項(或實例化的每個不需要的bean)的順便說說)。 @MockBean放在測試中的某個字段上更方便,但是仍然需要在我們的測試中定義一個字段并在其上添加批注(5?10?15 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 approach@MockBeanprivate 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.html
spock 集成測試
總結
以上是生活随笔為你收集整理的spock 集成测试_使用Spock 1.2简化对遗留应用程序的集成测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果解释 macOS Sonoma 中游
- 下一篇: corda_Corda服务的异步流调用