2012-02-02 121 views
1
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"/applicationContext-test.xml"}) 
@Transactional 
public class MyServiceTest { 

    @Resource(name="myService") 
    public MyService myService; 

    @Test 
    public void testSeomthing() { 
    //do some asserts using myService.whatever() 
    } 
} 

但是,測試基於我遷移的數據,因此每次運行我的測試套件時,我都希望執行不相關的遷移代碼。我不想在每個測試課中運行@Before。我想在完整的測試過程開始時運行一次,我可以在哪裏放置它?基於遷移數據的集成測試彈簧服務層

回答

1

我會建議你在@PostConstruct調用啓動邏輯的地方創建一個測試豆:

@Service 
public class TestBean { 

    @PostConstruct 
    public void init() { 
     //startup logic here 
    } 

} 

顯然這個bean應該只用於測試創建,實現這一目標的最簡單的方法就是把它放在src/test/java在彈簧component-scan包裝@Service -annated類。

注意:您必須記住@PostConstruct未在事務中運行!見How to call method on spring proxy once initialised

1

JUnit還提供了一個@BeforeClass註釋,您可以將其放置在一個靜態方法上來初始化資源一次。

+0

謝謝,但我完全不明白。我會有一個單獨的類,將有一個靜態方法,我會註釋?或者每個測試類中都有一個靜態方法? – NimChimpsky 2012-02-02 14:52:40

+0

每個測試類中的一個靜態方法。不完全確定@BeforeClass是否被繼承。 (可能要檢查文檔) – 2012-02-02 14:54:16

+0

那麼它會運行每個測試類?我想讓它爲所有測試運行一次......? – NimChimpsky 2012-02-02 14:55:10