将参数传递给Junit设置方法

时间:2017-08-02 07:03:55

标签: java spring

我有以下基础测试类,其他测试类将扩展:

@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。有没有办法不为这两类测试类中的每一类创建一个类?

1 个答案:

答案 0 :(得分:2)

我是其中一个不喜欢使用父类进行测试的人之一。最好使用您在测试设置中包含的实用程序,以便开发人员了解这些测试所依赖的内容,而无需浏览层次结构来查找@ Before,@ After,或者其他什么这可能会影响那些测试。此外,对于层次结构,当您想要组合实现时,您很快就会遇到问题(您知道,不允许使用多个父项)。

话虽如此,对于你提出的方法,我只是将这个Base类抽象化并声明一个抽象方法来识别实际测试是否需要这些过滤器。 setup()然后只需要调用该方法并执行它需要做的任何事情。你的测试类只需要实现那个抽象方法(它基本上是一个真/假标志)。

如果您只在测试之间进行这种区分,那么您还可以再有2个子基类(主基类的子类),每个类都以自己的方式实现该抽象方法。然后,您的测试可以只扩展其中一个子类,而不实现任何内容。