您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > junit
使用 JUnit 5 進(jìn)行單元測(cè)試
作者:ibm 發(fā)布時(shí)間:[ 2017/3/24 15:27:42 ] 推薦標(biāo)簽:單元測(cè)試 Junit 5 單元測(cè)試工具

  清單 22. 參數(shù)解析的示例
  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 給出了使用參數(shù)解析擴(kuò)展的示例。
  清單 23. 使用參數(shù)解析擴(kuò)展的示例
  @ExtendWith(APIEnvResolver.class)
  public class APITests {
  @Test
  public void showResolved(final String env) {
  assertEquals("DEV", env);
  }
  }
  測(cè)試執(zhí)行回調(diào)方法
  JUnit 5 提供了一系列與測(cè)試執(zhí)行過(guò)程相關(guān)的回調(diào)方法,在測(cè)試執(zhí)行中的不同階段,運(yùn)行自定義的邏輯。這些回調(diào)方法可以用來(lái)做一些與日志和性能分析的任務(wù)。具體的回調(diào)方法和描述見(jiàn)表 3。
  表 3. 測(cè)試執(zhí)行中的回調(diào)方法

  清單 24 中給出了使用測(cè)試執(zhí)行中的回調(diào)方法的示例。
  清單 24. 使用測(cè)試執(zhí)行回調(diào)方法的示例
  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));
  }
  }
  異常處理
  通過(guò) TestExecutionExceptionHandler 接口可以對(duì)測(cè)試運(yùn)行中拋出的異常進(jìn)行處理?梢栽谶\(yùn)行中忽略某些異常,或是在特定類(lèi)型的異常發(fā)生時(shí)執(zhí)行某些處理動(dòng)作,如可以在出現(xiàn)數(shù)據(jù)庫(kù)異常時(shí)回滾事務(wù)。清單 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 平臺(tái)可以通過(guò) Jupiter 引擎來(lái)運(yùn)行 JUnit 5 測(cè)試,Vintage 引擎來(lái)運(yùn)行 JUnit 3 和 JUnit 4 測(cè)試。因此,已有的 JUnit 3 和 4 的測(cè)試不需要任何修改可以直接在 JUnit 平臺(tái)上運(yùn)行。只需要確保 Vintage 引擎的 jar 包出現(xiàn)在 classpath 中,JUnit 平臺(tái)會(huì)自動(dòng)發(fā)現(xiàn)并使用該引擎來(lái)運(yùn)行 JUnit 3 和 4 測(cè)試。開(kāi)發(fā)人員可以按照自己的項(xiàng)目安排來(lái)規(guī)劃遷移到 JUnit 5 的進(jìn)度?梢员3忠延械 JUnit 3 和 4 的測(cè)試用例不變,而新增加的測(cè)試用例則使用 JUnit 5。
  在進(jìn)行遷移的時(shí)候需要注意如下的變化:
  注解在 org.junit.jupiter.api 包中,斷言在 org.junit.jupiter.api.Assertions 類(lèi)中,前置條件在 org.junit.jupiter.api.Assumptions 類(lèi)中。
  把@Before 和@After 替換成@BeforeEach 和@AfterEach。
  把@BeforeClass 和@AfterClass 替換成@BeforeAll 和@AfterAll。
  把@Ignore 替換成@Disabled。
  把@Category 替換成@Tag。
  把@RunWith、@Rule 和@ClassRule 替換成@ExtendWith。
  小結(jié)
  單元測(cè)試是應(yīng)用程序不可或缺的一部分。作為 Java 開(kāi)發(fā)中單元測(cè)試的事實(shí)標(biāo)準(zhǔn),JUnit 被廣泛使用。本文詳細(xì)介紹了在 JUnit 5 中編寫(xiě)和運(yùn)行測(cè)試用例的方式,并對(duì)新的擴(kuò)展機(jī)制做了詳細(xì)介紹。在編寫(xiě)測(cè)試用例方面,本文介紹了 JUnit 5 中新的注解、斷言和前置條件,以及對(duì)于嵌套測(cè)試、依賴(lài)注入和動(dòng)態(tài)測(cè)試的支持。在運(yùn)行測(cè)試用例方面,詳細(xì)介紹了通過(guò) Gradle、Maven 和命令行來(lái)運(yùn)行 JUnit 5 測(cè)試。擴(kuò)展機(jī)制作為 JUnit 5 的一大亮點(diǎn),本文詳細(xì)介紹了如何通過(guò)擴(kuò)展來(lái)添加測(cè)試執(zhí)行條件、后處理測(cè)試實(shí)例、解析測(cè)試和處理異常等。開(kāi)發(fā)人員可以現(xiàn)在嘗試 JUnit 5 中的新功能。

上一頁(yè)1234下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd