1. 程式人生 > 程式設計 >簡單瞭解Java斷言利器AssertJ原理及用法

簡單瞭解Java斷言利器AssertJ原理及用法

AssertJ是我目前見過的最強大的斷言api,沒有之一。

官網傳送門

為什麼使用assertJ?

1、流式斷言,程式碼即用例,直觀易懂。

舉個例子:

傳統的junit或者testng,判斷一個字串包不包括a跟b兩個字元。要這麼寫

assertTrue(stringbuffer.contains("a") && stringbuffer.contains("b"))

而如果你用的assertJ

assertThat(stringbuffer).contains("a").contains("b").as("判斷字串是否包括a|b")

相比之下,顯然後者更加容易理解。而且as的註釋更是讓斷言清晰

2、方便定製的斷言器

試想一下。當你在做介面測試的時候,還在到處寫著

JSONPath.eval(JSONObject.parse(String),"$yourpath").tostring.equals(expectString)

你的介面自動化裡邊。到處都是這些看都不想看的json解析,判斷。然而,當你有了assertJ,你可以自定義你的斷言,儘可能的簡化你的測試程式碼,可讀性將能幾何倍數提升。下邊是我自己寫的一個針對json的自定義斷言器:

import java.math.BigDecimal;

import org.assertj.core.api.AbstractAssert;
import org.assertj.core.api.AbstractBigDecimalAssert;
import org.assertj.core.api.AbstractBooleanAssert;
import org.assertj.core.api.AbstractCharSequenceAssert;
import org.assertj.core.api.AbstractIntegerAssert;
import org.assertj.core.api.Assertions;

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONPath;


/**
 * assertJ json資料判斷增強 eg:不提供提取陣列的方法,在斷言中作用比較小
 * 
 * @author jacksoncina2008
 *
 */
public class AssertJSON extends AbstractAssert<AssertJSON,String> {

  protected AssertJSON(String actual) {
    super(actual,AssertJSON.class);
    // TODO Auto-generated constructor stub
  }

  public static AssertJSON assertThat(String json) {
    return new AssertJSON(json);
  }

  /**
   * 提取字串節點
   */
  public AbstractCharSequenceAssert<?,String> jsonPathAsString(String path) {
    return Assertions.assertThat((String) JSONPath.eval(getJSON(actual),path));
  }

  /**
   * 提取boolean節點
   */

  public AbstractBooleanAssert<?> jsonPathAsBoolean(String path) {
    return Assertions.assertThat((boolean) JSONPath.eval(getJSON(actual),path));
  }



  /**
   * 提取數字節點
   *
   */
  public AbstractIntegerAssert<?> jsonPathAsInteger(String path) {
    return Assertions.assertThat((Integer) JSONPath.eval(getJSON(actual),path));
  }

  /**
   * 提取小數
   * 
   */

  public AbstractBigDecimalAssert<?> jsonPathAsBigDecimal(String path) {
    return Assertions.assertThat((BigDecimal) JSONPath.eval(getJSON(actual),path));
  }

  private JSONObject getJSON(String json) {
    JSONObject j = new JSONObject();
    j = JSONObject.parseObject(json);
    return j;
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。