[英]Independent JUnit Tests with Springs @Autowired
作為測試驅動開發的初學者,我剛剛遇到了一個問題。 我的測試 class 開始如下:
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
@DirtiesContext
@ContextConfiguration(locations = {"/web-test.xml"})
public class XXTest {
@Autowired
XX xx;
@Autowired
HibernateTemplate template;
@Test
public void testSetGetXXValue() throws Exception {
final Map<String, YY> profilMap = new HashMap<String, YY>(2);
profilMap.put("1", new YY());
profilMap.put("2", new YY());
simpleCockpit.setValues(profilMap);
assertEquals(profilMap, simpleCockpit.getValues());
}
如您所見,第一個測試方法改變了自動裝配的 XX 類。 這會影響以下所有測試方法,這些測試方法依賴於 XX 具有自動裝配值。
如何從 XX 測試 getter 和 setter 並確保 XX 具有測試方法的 rest 的自動接線值?
想法:
謝謝你的回答。 我很確定這有一個簡單的解決方案..:)
編輯:關於是否單元測試 getter/setter 的問題,我決定這樣做主要是因為http://www.sundog.net/sunblog/posts/should-we-test-getters-and-二傳手/ 。
如果您修改 spring 托管 bean,那么您可以使用@DirtiesContext
注釋。 這個注解可以放在測試類和測試方法上!
來自@DirtiesContext Java 文檔:
指示與測試關聯的 {@link org.springframework.context.ApplicationContext ApplicationContext} 是臟的並且應該關閉的測試注釋:
- 在當前測試之后,在方法級別聲明時
- 在當前測試 class 中的每個測試方法之后,當在 class 級別聲明且 class 模式設置為 {@link ClassMode#AFTER_EACH_TEST_METHOD} AFTER
- 在當前測試 class 之后,在 class 級別聲明且 class 模式設置為 {@link ClassMode#AFTER_CLASS AFTER_CLASS}
甚至在測試驅動開發中(據我了解):僅為具有最低復雜性的東西編寫顯式測試。 所以我從不為 getter 和 setter 寫明確的測試。 我通常有一個檢查一些功能的測試,當這個功能需要 getter 和 setter 時,我編寫了這個 getter 和 setter(此時),並且它們的工作將由我從隱式開始的功能檢查。
特別是在您的情況下:您為什么使用 Spring Bean,為什么不使用使用new
創建的“普通”對象。 只要對測試有用,我就使用“普通”類,主要用於簡單測試。 我也使用 Spring Beans 進行“更大”的測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.