2017-04-24 50 views
1

以下是我的測試類的類代碼。Spring Boot Test不會檢測測試類中的靜態嵌套@Named組件

@SpringBootTest(classes = { SpringBootApp.class }, webEnvironment = WebEnvironment.RANDOM_PORT) 
public class OuterBeanTest { 

    @Inject 
    InnerBeanTest innerBean; 

    @Test 
    public void test() { 
     assertThat(this.innerBean.print()).isEqualTo("print"); 
    } 

    @Named 
    static class InnerBeanTest { 

     String print(){ 
      return "print"; 
     } 
    }; 
} 

但是靜態類的注入測試實例會引發約Unsatisfied dependency expressed through field 'innerBean'; expected at least 1 bean which qualifies as autowire candidate.

我怎樣才能把它注射到測試實例中的錯誤?

編輯

OuterBeanTest.javacom.generalsrc/test/java,而春天啓動的應用是在comsrc/main/java

SpringBootApp.java

package com; 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 

@SpringBootApplication 
public class SpringBootApp { 

    public static void main(String[] args) { 

     SpringApplication.run(SpringBootApp.class, args); 
    } 
} 

注:相同的工作Spring-4.2.8但現在我已經升級到Spring-4.3.7和它停止工作。

+0

'內靜' 是一種自相矛盾的說法。參見JLS#8.1.3。這是一個靜態類。 – EJP

+0

@EJP正在明確,我知道它的區別。 –

+0

我們錯過了一些相關的信息:'OuterBeanTest'駐留在哪個包中? 'SpringBootApp'包含什麼包? 'SpringBootApp'上有什麼註釋? –

回答

0

Spring Boot 1.4中的測試支持不再自動檢測測試類中的靜態嵌套組件。這是由於在幕後使用org.springframework.boot.test.context.filter.TestTypeExcludeFilter

因此,你有兩種選擇。

  1. 移動InnerBeanTest一個頂級類,或...
  2. 標註OuterBeanTest@Import(OuterBeanTest.InnerBeanTest.class)

問候,

山姆