设计Junit5以有选择地重新启动模拟组件

时间:2018-10-09 04:20:03

标签: java unit-testing junit junit5

我有一个如下的用例

对于JUnit流中的每个测试用例都是这样的 1.在@BeforeEach停止/启动模拟组件中能够接收数据 2.在@Test中,将数据发送到模拟组件并获取响应并进行断言

我正在寻找的增强功能是,应该能够使用不同的配置/设置来启动/停止模拟组件。

我在想以下几种选择
1.使用Junit 5标签(因此我们知道使用哪个标签的测试用例)
2.在@BeforeEach方法中,注入TestInfo类并检索标签,并根据标签相应地停止/启动模拟组件。

import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestReporter;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

public class TestJUnit {

  @BeforeAll
  public static void onlyOnce() {
    System.out.println("only once");
  }

  MockedComponent mock;
  Actor actor;

  @BeforeEach
  public void restartComponent(TestInfo testInfo,TestReporter report) {
    System.out.println("before each "+testInfo.getDisplayName()+"|"+testInfo.getTags()+"|"+testInfo.getTestClass());
    mock.stop();
    mock.start(testInfo.getTags().iterator().next());
  }

  @ParameterizedTest
  @Tag("config1.settings")
  public void testUsingConfig1() {
    System.out.println("testHeaderValuesArePopulated ");
    actor.getDataFromComponent().assertOrderId(123);
  }

  @ParameterizedTest
  @Tag("config2.settings")
  public void testUsingConfig2() {
    actor.sendMsg("test messages 2");
    actor.getDataFromComponent().assertOrderId(123);
  }

}

使用Junit5还有更好的方法吗?

0 个答案:

没有答案