簡體   English   中英

將junit偵聽器添加到SpringJUnit4ClassRunner

[英]Add a junit listener to a SpringJUnit4ClassRunner

我有一個使用SpringJUnit4ClassRunner運行的單元測試,如下所示:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:aConfig.xml")
public class TestService
{
     @Resource
     EmbeddedMysqlDatabase mysqlDB;

     ...
}

我有一個嵌入式數據庫,用於單元測試,我想在運行所有測試后關閉。 我知道在單元測試中嵌入數據庫不是通常的/良好實踐,但在這種特殊情況下,這是非常有用的。

@AfterClass不是一個選項,因為它必須是靜態的,我的數據庫實例是由spring注入的。 靜態成員不能注入。

我怎么能通過聽眾或任何其他方式做到這一點?

謝謝。

您可以使用@TestExecutionListeners。 像這樣的東西:

public class ShutdownExecutionListener extends AbstractTestExecutionListener {
    @Override 
    public void beforeTestClass(TestContext testContext) throwsException {
    }      
    @Override 
    public void afterTestClass(TestContext testContext) throws Exception{
        EmbeddedMysqlDatabase mysqlDB= 
            (EmbeddedMysqlDatabase)testContext.getApplicationContext().getBean(mysqlDB);
        mysqlDB.shutdown();     
    } 
}

在你的測試中:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:aConfig.xml")
@TestExecutionListeners(listeners = ShutdownExecutionListener.class)
public class TestService
{
     @Resource
     EmbeddedMysqlDatabase mysqlDB;

     ...
}

效果很好,但不要忘記設置“mergeMode”

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:aConfig.xml")
@TestExecutionListeners(listeners = {ShutdownExecutionListener.class}, 
                        mergeMode = MergeMode.MERGE_WITH_DEFAULTS)
public class TestService
{
    @Resource
    EmbeddedMysqlDatabase mysqlDB;
    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM