我有以下其他测试类将要扩展的基本测试类:
@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
to 的MockMvcBuilders
,另一种则不是addFilters
。我无法将任何参数传递给setup
. 有没有办法不为这两类测试类中的每一种创建一个类?
我是那些不喜欢使用父类进行测试的人之一。最好使用您在测试设置中包含的实用程序,以便开发人员了解这些测试所依赖的内容,而无需浏览层次结构以查找 @Before 、 @After 或任何可能影响这些测试的内容。此外,对于层次结构,当您想要组合实现时很快就会遇到问题(您知道,不允许有多个父级)。
话虽如此,对于您提出的方法,我只会使这个基类抽象并声明一个抽象方法来确定实际测试是否需要这些过滤器。setup() 然后只需要调用该方法并做它需要做的任何事情。您的测试类只需要实现该抽象方法(这基本上是一个真/假标志)。
如果您的测试之间只有这种区别,那么您还可以有 2 个以上的子基类(主基类的子类),每个基类都以自己的方式实现该抽象方法。然后,您的测试可以仅扩展这些子基类之一,而无需实现任何内容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句