您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > junit
使用 JUnit 5 进行单元测试
作者:ibm 发布时间:[ 2017/3/24 15:27:42 ] 推荐标签:单元测试 Junit 5 单元测试工具

  清单 22. 参数解析的示例
  public class APIEnvResolver implements ParameterResolver {
  @Override
  public boolean supports
  (final ParameterContext parameterContext,
  final ExtensionContext extensionContext) throws
  ParameterResolutionException {
  return parameterContext.getParameter().getType() == String.class
  && parameterContext.getIndex() == 0;
  }
  @Override
  public Object resolve(final ParameterContext parameterContext,
  ? final ExtensionContext extensionContext)
  throws ParameterResolutionException {
  return "DEV";
  }
  }
  清单 23 给出了使用参数解析扩展的示例。
  清单 23. 使用参数解析扩展的示例
  @ExtendWith(APIEnvResolver.class)
  public class APITests {
  @Test
  public void showResolved(final String env) {
  assertEquals("DEV", env);
  }
  }
  测试执行回调方法
  JUnit 5 提供了一系列与测试执行过程相关的回调方法,在测试执行中的不同阶段,运行自定义的逻辑。这些回调方法可以用来做一些与日志和性能分析的任务。具体的回调方法和描述见表 3。
  表 3. 测试执行中的回调方法

  清单 24 中给出了使用测试执行中的回调方法的示例。
  清单 24. 使用测试执行回调方法的示例
  public class Timing implements BeforeTestExecutionCallback,
  AfterTestExecutionCallback {
  @Override
  public void beforeTestExecution
  (final TestExtensionContext context) throws Exception {
  getStore(context).put
  (context.getTestMethod().get(), System.currentTimeMillis());
  }
  @Override
  public void afterTestExecution
  (final TestExtensionContext context) throws Exception {
  final Method testMethod = context.getTestMethod().get();
  final long start = getStore(context).remove(testMethod, long.class);
  final long duration = System.currentTimeMillis() - start;
  context.publishReportEntry(ImmutableMap.of
  (testMethod.getName(), Long.toString(duration)));
  }
  private Store getStore(TestExtensionContext context) {
  return context.getStore(Namespace.create(getClass(), context));
  }
  }
  异常处理
  通过 TestExecutionExceptionHandler 接口可以对测试运行中抛出的异常进行处理。可以在运行中忽略某些异常,或是在特定类型的异常发生时执行某些处理动作,如可以在出现数据库异常时回滚事务。清单 25 给出了异常处理的示例。
  清单 25. 异常处理的示例
  public class IgnoreNullPointerException implements
  TestExecutionExceptionHandler {
  @Override
  public void handleTestExecutionException
  (final TestExtensionContext context,
  final Throwable throwable) throws Throwable {
  if (throwable instanceof NullPointerException) {
  return;
  }
  throw throwable;
  }
  }
  迁移指南
  JUnit 平台可以通过 Jupiter 引擎来运行 JUnit 5 测试,Vintage 引擎来运行 JUnit 3 和 JUnit 4 测试。因此,已有的 JUnit 3 和 4 的测试不需要任何修改可以直接在 JUnit 平台上运行。只需要确保 Vintage 引擎的 jar 包出现在 classpath 中,JUnit 平台会自动发现并使用该引擎来运行 JUnit 3 和 4 测试。开发人员可以按照自己的项目安排来规划迁移到 JUnit 5 的进度。可以保持已有的 JUnit 3 和 4 的测试用例不变,而新增加的测试用例则使用 JUnit 5。
  在进行迁移的时候需要注意如下的变化:
  注解在 org.junit.jupiter.api 包中,断言在 org.junit.jupiter.api.Assertions 类中,前置条件在 org.junit.jupiter.api.Assumptions 类中。
  把@Before 和@After 替换成@BeforeEach 和@AfterEach。
  把@BeforeClass 和@AfterClass 替换成@BeforeAll 和@AfterAll。
  把@Ignore 替换成@Disabled。
  把@Category 替换成@Tag。
  把@RunWith、@Rule 和@ClassRule 替换成@ExtendWith。
  小结
  单元测试是应用程序不可或缺的一部分。作为 Java 开发中单元测试的事实标准,JUnit 被广泛使用。本文详细介绍了在 JUnit 5 中编写和运行测试用例的方式,并对新的扩展机制做了详细介绍。在编写测试用例方面,本文介绍了 JUnit 5 中新的注解、断言和前置条件,以及对于嵌套测试、依赖注入和动态测试的支持。在运行测试用例方面,详细介绍了通过 Gradle、Maven 和命令行来运行 JUnit 5 测试。扩展机制作为 JUnit 5 的一大亮点,本文详细介绍了如何通过扩展来添加测试执行条件、后处理测试实例、解析测试和处理异常等。开发人员可以现在尝试 JUnit 5 中的新功能。

上一页1234下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd