![](/img/trans.png)
[英]How to run code before SpringJUnit4ClassRunner context initialization?
[英]How many times should SpringJUnit4ClassRunner initialize it's context?
據說 ,
Test注釋告訴JUnit,可以將其附加到的public void方法作為測試用例運行。 為了運行該方法,JUnit首先構造一個新的類實例,然后調用帶注釋的方法。 測試拋出的任何異常將由JUnit報告為失敗。 如果未引發任何異常,則假定測試成功。
這可能意味着,對於每個@Test
方法,應再次初始化上下文。 這個答案也證實了這一點: https : //stackoverflow.com/a/1564309/258483
同時,我在實驗中看到了相反的結果:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringJUnit4ClassRunnerDemo._Config.class)
public class SpringJUnit4ClassRunnerDemo {
public static class Bean1 {
{
System.out.println("Bean1 constructor called");
}
}
public static class Bean2 {
{
System.out.println("Bean2 constructor called");
}
private Bean1 bean1;
public Bean1 getBean1() {
return bean1;
}
@Autowired
public void setBean1(Bean1 bean1) {
this.bean1 = bean1;
System.out.println("Bean2.bean1 property set");
}
}
@Configuration
public static class _Config {
@Bean
public Bean1 bean1() {
return new Bean1();
}
@Bean
public Bean2 bean2() {
return new Bean2();
}
}
@Autowired
private Bean1 bean1;
@Autowired
private Bean2 bean2;
@Test
public void testBean1() {
assertNotNull(bean1);
System.out.println("testBean1() done");
}
@Test
public void testBean2() {
assertNotNull(bean2);
assertSame(bean2.getBean1(), bean1);
System.out.println("testBean2() done");
}
}
該代碼輸出
Bean1 constructor called
Bean2 constructor called
Bean2.bean1 property set
testBean1() done
testBean2() done
這可能意味着上下文沒有在第二次測試之前第二次初始化。
什么是實際和正確的行為以及如何控制它?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.