春天和T estNG在一起工作得很好,但有些事情要注意。除了繼承AbstractTestNGSpringContextTests之外,您還需要了解它如何與標準TestNG setup/teardown註釋交互。
TestNG中有四個層次設置的
- BeforeSuite
- BeforeTest
- BeforeClass
- BeforeMethod
發生完全按照自己的預期(自文檔的API很好的例子)。這些都有一個可選的值,名爲「dependsOnMethods」,它可以接受一個String或String [],它是同級別方法的名稱或名稱。
AbstractTestNGSpringContextTests類有一個名爲springTestContextPrepareTestInstance的BeforeClass批註方法,如果您在其中使用自動裝配類,則必須將安裝方法設置爲依賴於它。對於方法,您不必擔心自動裝配,因爲它是在類方法之前設置測試類時發生的。
這只是留下了如何在使用BeforeSuite註釋的方法中使用自動裝配類的問題。你可以通過手動調用springTestContextPrepareTestInstance來做到這一點 - 雖然它沒有默認設置,但我已經成功完成了好幾次。
所以,爲了說明這一點,奧雅納的例子的修改版本:
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.Test;
@Test
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class TestValidation extends AbstractTestNGSpringContextTests {
@Autowired
private IAutowiredService autowiredService;
@BeforeClass(dependsOnMethods={"springTestContextPrepareTestInstance"})
public void setupParamValidation(){
// Test class setup code with autowired classes goes here
}
@Test
public void testNullParamValidation() {
// Testing code goes here!
}
}
感謝。這正是我要找的。 – 2010-04-10 03:20:36
真是一團糟。首先執行特定的類層次結構。其次,由於使用'@ Transactional'的測試用例可能錯誤地擴展了非事務版本,所以很令人困惑。但不幸的是,在TestNG中沒有其他方法來使用Spring。 – 2014-10-22 09:53:44
@GrzesiekD。我希望在4.5年後有所改變。 :)所以請重新檢查現狀。 – lexicore 2014-10-22 09:55:21