2017-08-02 80 views
0

我有以下的基本測試類進行其它測試類要延伸:傳遞參數的Junit設置方法

@RunWith(SpringRunner.class) 
@SpringBootTest 
@AutoConfigureMockMvc 
@ActiveProfiles("test") 
public class BaseControllerTest { 

    @Autowired 
    protected Filter springSecurityFilterChain; 

    @Autowired 
    protected MockMvc mockMvc; 

    @MockBean 
    protected AuthenticationManager authenticationManager; 

    @Autowired 
    protected WebApplicationContext context; 

    @Before 
    public void setup() throws SQLException { 
     mockMvc = MockMvcBuilders.webAppContextSetup(context) 
       .addFilters(springSecurityFilterChain).build(); 
     Server webServer = Server.createWebServer("-web", "-webAllowOthers", "-webPort", "8082"); 
     webServer.start(); 
    } 
} 

有兩種類型的測試類的,一個addFiltersMockMvcBuilders和其他那些不要addFilters。我無法將任何參數傳遞給setup。有沒有辦法爲這兩類測試類中的每一類創建一個類?

回答

2

我是那些不喜歡使用父類進行測試的人之一。最好使用包含在測試設置中的實用程序,以便開發人員瞭解這些測試依賴的內容,而無需瀏覽層次結構以查找@ Before,@ After或任何可能影響這些測試的內容。此外,在層次結構中,當你想要結合實現時,你可能會面臨很快的問題(你知道,不允許多個父母)。如上所述,對於您提出的方法,我只需製作此基類抽象並聲明一個抽象方法來確定實際測試是否需要這些過濾器。 setup()只需要調用該方法並執行所需的任何操作。你的測試類只需要實現抽象方法(這基本上是一個真/假標誌)。

如果你的測試只有這種區別,那麼你還可以有2個更多的子基類(主基類的子類),每個子類都以自己的方式實現該抽象方法。然後,您的測試可以擴展其中一個子基類,而不執行任何操作。