Java 将参数传递给Junit安装方法
我有以下基本测试类,其他测试类将对其进行扩展:Java 将参数传递给Junit安装方法,java,spring,Java,Spring,我有以下基本测试类,其他测试类将对其进行扩展: @RunWith(SpringRunner.class) @SpringBootTest @AutoConfigureMockMvc @ActiveProfiles("test") public class BaseControllerTest { @Autowired protected Filter springSecurityFilterChain; @Autowired protected MockMv
@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();
}
}
有两种类型的测试类,一种是
addFilters
到MockMvcBuilders
的,另一种是不addFilters
的。我无法将任何参数传递给设置
。有没有办法不为这两类测试类中的每一类创建一个类 我是那些不喜欢在测试中使用父类的人之一。最好使用测试设置中包含的实用程序,这样开发人员就可以知道这些测试所依赖的是什么,而无需在层次结构中导航以查找@Before's、@After's或任何可能影响这些测试的内容。此外,对于层次结构,当您想要组合实现时,很快就会遇到问题(您知道,不允许有多个父级)
话虽如此,对于您提出的方法,我只是将这个基类抽象并声明一个抽象方法,以确定实际测试是否需要这些过滤器。然后,setup()只需要调用该方法并执行它需要执行的任何操作。您的测试类只需要实现该抽象方法(基本上是一个真/假标志)
如果您的测试之间只有这种区别,那么您还可以有另外两个子基类(主基类的子类),每个子基类以自己的方式实现该抽象方法。然后,您的测试可以只扩展这些子基类中的一个,而不实现任何东西。我是不喜欢在测试中使用父类的人之一。最好使用测试设置中包含的实用程序,这样开发人员就可以知道这些测试所依赖的是什么,而无需在层次结构中导航以查找@Before's、@After's或任何可能影响这些测试的内容。此外,对于层次结构,当您想要组合实现时,很快就会遇到问题(您知道,不允许有多个父级) 话虽如此,对于您提出的方法,我只是将这个基类抽象并声明一个抽象方法,以确定实际测试是否需要这些过滤器。然后,setup()只需要调用该方法并执行它需要执行的任何操作。您的测试类只需要实现该抽象方法(基本上是一个真/假标志) 如果您的测试之间只有这种区别,那么您还可以有另外两个子基类(主基类的子类),每个子基类以自己的方式实现该抽象方法。然后,您的测试可以只扩展其中一个子基类,而不实现任何东西