測試

2017-10-06 62 views
0

時,排除ApplicationStartup事件監聽我最近增加了一個ApplicationStartup類我SpringBoot項目測試

@Component 
public class ApplicationStartup 
    implements ApplicationListener<ApplicationReadyEvent> { ... 

它實現了ApplicationListener。

現在,當我運行與該類無關的舊JUNit測試時,testrunner會嘗試運行我的StartupListener,在這些情況下,這兩者都不是必需的。

當我的測試初始化​​時,如何跳過ApplicationListener?

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class SubmissionItemManagerTest {... 
+0

你想避免只有一個豆嗎? –

回答

1

你可以嘲笑你的ApplicationStartup

此聲明添加到您的測試案例:在您的測試方面

@MockBean 
private ApplicationStartup applicationStartup 

這將創建ApplicationStartup一個嘲笑實例,並把它標記爲@Primary從而替換ApplicationStartup的實際實例。

+0

如何使用時可以這樣做:@SpringBootTest(classes = Application.class,webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) – fiddle

1

您可以爲測試創建單獨的應用程序類和排除沒有被要求測試的組件:

@SpringBootApplication 
@ComponentScan(excludeFilters = @ComponentScan.Filter(
     type = FilterType.ASSIGNABLE_TYPE, 
     value = { ApplicationStartup.class, 
       RealApplication.class })) 

public class TestApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(TestApplication.class, args); 
    } 
} 

然後在您的SubmissionItemManagerTest類使用TestApplication類:

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = TestApplication.class) 
public class SubmissionItemManagerTest { 
    ... 
}