日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring测试支持和上下文缓存

發布時間:2023/12/3 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring测试支持和上下文缓存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Spring為單元測試和集成測試提供了全面的支持-通過注釋來加載Spring應用程序上下文,并與JUnit和TestNG等單元測試框架集成。 由于為每個測試加載大型應用程序上下文需要時間,因此Spring智能地為測試套件緩存應用程序上下文–通常,當我們通過ant或maven對項目執行測試時,會創建一個包含項目中所有測試的套件。

我打算在這里介紹一些有關緩存的注意事項,這可能并不全面,但是基于我遇到的某些情況:

1.緩存基于Spring應用程序上下文文件的位置

考慮一個示例Spring配置文件:

<?xml version='1.0' encoding='UTF-8' standalone='no'?> <beans xmlns='http://www.springframework.org/schema/beans'xmlns:context='http://www.springframework.org/schema/context'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xmlns:p='http://www.springframework.org/schema/p'xsi:schemaLocation='http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd'><bean id='user1' class='org.bk.lmt.domain.TaskUser' p:username='user1' p:fullname='testUser1' /><bean name='user2' class='org.bk.lmt.domain.TaskUser' p:username='user2' p:fullname='testUser' /><bean class='org.bk.contextcaching.DelayBean'/></beans>

還有一個樣本測試,用于加載此上下文文件并進行驗證。

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { 'contexttest.xml' }) public class Test1 {@Autowired Map<String, TaskUser> usersMap;@Testpublic void testGetAUser() {TaskUser user = usersMap.get('user1');assertThat(user.getFullname(), is('testUser1'));} }

我故意添加了一個bean(DelayBean),它花了大約2秒鐘來實例化,以模擬加載緩慢的Spring Application Context。

如果我現在運行一個帶有兩個測試的小型測試套件,兩個測試都使用相同的應用程序上下文,則行為是第一個測試需要大約2秒鐘才能運行,但是第二個測試由于上下文緩存而很快就可以運行。

如果使用不同的應用程序上下文進行了第三項測試,則該測試將再次花費時間來運行,因為必須加載新的應用程序上下文:

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { 'contexttest2.xml' }) public class Test3 { ... }

2.應用程序上下文的緩存尊重運行測試的活動配置文件–本質上,該配置文件也是Spring用于緩存上下文的內部密鑰的一部分,因此,如果兩個測試使用的是完全相同的應用程序上下文,但不同的配置文件是對于每個測試都處于活動狀態,則緩存的應用程序上下文將不會用于第二個測試:

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { 'contexttest.xml' }) @ActiveProfiles('dev1') public class Test1 { .... @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { 'contexttest.xml' }) @ActiveProfiles('dev2') public class Test2 { ....

3.即使使用新的@Configuration樣式定義應用程序上下文并在測試中使用它,應用程序上下文的緩存也適用:

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes={TestConfiguration.class}) public class Test1 { ... @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes={TestConfiguration.class}) public class Test2 { ....

緩存的一個含義是,如果測試類修改了bean的狀態,則測試套件中使用緩存的應用程序上下文的另一個類將最終看到修改后的bean,而不是在應用程序上下文中定義的bean。 :

例如。 考慮兩個測試,這兩個測試都在上下文中修改了一個bean,但是在狀態中聲明了它在應用程序上下文中定義的方式–在這里,其中一個測試最終會失敗(基于Junit執行測試的順序) ):

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes={TestConfiguration.class}) public class Test1 {@Autowired Map<String, TaskUser> usersMap;@Testpublic void testGetAUser1() {TaskUser user = usersMap.get('user1');assertThat(user.getFullname(), is('testUser1'));user.setFullname('New Name');}@Testpublic void testGetAUser2() {TaskUser user = usersMap.get('user1');assertThat(user.getFullname(), is('testUser1'));user.setFullname('New Name');} }

解決方法是指示Spring測試支持人員該應用程序上下文現在很臟并且需要為其他測試重新加載,這是通過@DirtiesContext批注完成的,可以在測試類級別或測試方法級別指定該批注。

@Test @DirtiesContext public void testGetAUser2() { ...

祝您編程愉快,別忘了分享!

參考: all和其他博客中的JCG合作伙伴 Biju Kunjummen提供的Spring測試支持和上下文緩存 。


翻譯自: https://www.javacodegeeks.com/2012/09/spring-testing-support-and-context.html

總結

以上是生活随笔為你收集整理的Spring测试支持和上下文缓存的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。