【问题标题】:Reuse Spring Mockmvc in unit tests在单元测试中重用 Spring Mockmvc
【发布时间】:2017-07-14 08:44:00
【问题描述】:

Mockmvc 可以在测试套件中重用吗?我有几个测试套件,所以必须在每个测试之间初始化 mockmvc,然后运行所有测试真的很慢!

我尝试将 mockMvc 放入注解 @BeforeClass 而不是 @Before 但因为它是一个静态方法,WebApplicationContext 和 FilterChainProxy 是自动装配的,所以据我所知不能在静态方法中引用。

我的测试目前设置如下:

@ContextConfiguration(classes = {Application.class})
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class MyTest {

  @Autowired
  private static WebApplicationContext wac;

  @Autowired
  private static FilterChainProxy springSecurityFilter;

  private MockMvc mockMvc;

  @Before
  public void setUp() {
      assertNotNull(wac);
      assertNotNull(springSecurityFilter);

      this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).addFilters(springSecurityFilter).build();
  }

有谁知道如何/是否可以重用 Mockmvc?为每个测试设置和拆除似乎是一项昂贵的操作。

任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: spring unit-testing spring-mvc mockmvc spring-mvc-test


    【解决方案1】:

    如果设置了不会覆盖 mockMvc 的 @Before 方法怎么样。

    private static MockMvc mockMvc = null;
    
    @Before
    public void setUp() {
        assertNotNull(wac);
        assertNotNull(springSecurityFilter);
    
        if (this.mockMvc == null) {
            this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).addFilters(springSecurityFilter).build();
        }
    }
    

    【讨论】:

    • 但是 mockmvc 在每次测试后都会被拆除,因此它将再次设置为 null 并重新初始化。另外,我想你的意思是this.mockMvc == null
    • 修复了空检查,也忘记了 MockMvc 成员上的静态。我已经测试过了,它只会初始化一次 mockMvc。
    • 我在 if 语句中添加了一个 print 语句,但是 print 语句在测试套件中的每个测试中都会执行
    • 我正在使用 Spring v4.2.5、JUnit v4.12 和 Java 1.8.0_51 - 我的套件中有 7 个测试,并且构造 mockMvc 的行只被命中一次,我有一个断点它。
    • 我也遇到了同样的问题。检查mockMvc是否为null是没有用的,因为mockMvc每次都会在@Before方法中实例化,原因是每次都为null
    猜你喜欢
    • 1970-01-01
    • 2015-03-29
    • 2015-11-20
    • 2016-11-30
    • 2018-06-26
    • 2013-12-28
    • 2018-04-27
    • 2019-05-18
    • 1970-01-01
    相关资源
    最近更新 更多