簡體   English   中英

SpringJUnit4ClassRunner是否為每個測試初始化​​bean?

[英]SpringJUnit4ClassRunner initialize beans for each test?

以下測試說明該測試bean由Spring初始化了兩次。 我希望有人可以告訴我為什么會這樣,因為它應該只有一次。 這是測試:

import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {} )
public class TestAfterPropsSet implements InitializingBean {

private static final Logger logger = Logger.getLogger(TestAfterPropsSet.class);

@Test
public void test1() {
    logger.debug("Test1");
}

@Test
public void test2() {
    logger.debug("Test2");      
}

public void afterPropertiesSet() throws Exception {
    logger.debug("Bean Initialized");       
}
} // end class

這是bean文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

這是輸出:

2009-10-13 21:20:04,393 [TestAfterPropsSet.java 26] DEBUG - Bean Initialized
2009-10-13 21:20:04,393 [TestAfterPropsSet.java 17] DEBUG - Test1
2009-10-13 21:20:04,393 [TestAfterPropsSet.java 26] DEBUG - Bean Initialized
2009-10-13 21:20:04,393 [TestAfterPropsSet.java 22] DEBUG - Test2

這不是Spring約定。 您應該遵循JUnit約定,即應在@BeforeClass和@AfterClass中相應地進行套件范圍的初始化或解構,或者可以使用@Autowire並讓Spring處理對象的作用域。

將為每次測試構建一個新套件。 這在JUnit3中更加明顯,在JUnit3中,您必須使用指定的測試名稱來創建新套件。

看一下JavaDoc

Test注釋告訴JUnit,可以將其附加到的public void方法作為測試用例運行。 為了運行該方法,JUnit首先構造一個新的類實例,然后調用帶注釋的方法。 測試拋出的任何異常將由JUnit報告為失敗。 如果未引發任何異常,則假定測試成功。

您的用例有點令人費解,因為您的測試實際上並沒有做任何事情,並且您沒有引用任何bean。 默認情況下,Spring Bean是使用默認的scope =“ singleton”屬性聲明的,因此,如果您實際上聲明了Bean,它將是已緩存的單例。 但是,這與方法執行無關。

暫無
暫無

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

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