断言和AssertJ简介

一个单元测试的执行通常分为4步:

  1. Setup: 创建被测对象并设置被测对象状态和环境状态。
  2. Exercise:执行被测试的方法。
  3. Verify:断言执行结果(返回值、副作用或异常)符合预期。
  4. Teardown:打扫环境,释放资源,将一切恢复到测试前状态。

其中的第3Verify就是断言起作用的地方。

JUnit 3.x及以前的版本有自己的断言,形式如下:

assertEquals(7, calculator.add(3, 4));

有各种各样的assertXXX()方法。这些方法通常接受两个参数,第一个是预期的值,第二个是实际的值。

JUnit 4.x支持Hamcrest断言库。例如:

assertThat(calculator.add(3, 4), equalTo(7));

但是我总觉得这样的断言编写起来很不爽。例如你很难知道针对特定的测试结果有哪些断言可用。所以我一直寻找更好的断言库,终于发现Assert符合我对断言的一切需求。AssertJ通过IDE的代码补全功能,能够针对目标对象的不同类型自动提示可用的断言方法,而且更重要的是支持流式断言:

        Collection<String> sut = Arrays.asList("I", "love", "you", "!");
        assertThat(sut)
                .isNotEmpty()
                .contains("I", "love")
                .doesNotContain("World");

我的建议是:忘掉JUnit自带的断言,忘掉Hamcrest,直接使用AssertJ

AssertJ包含以下几部分:

  • AssertJ Core:为JDK中的类型(String, Iterable, Stream, Path, File, Map…)提供断言。
  • AssertJ Guava:为Google Guava中的类型(Multimap, Optional…)提供断言。
  • AssertJ Joda:为Joda时间类型(DateTime, LocalDateTime)提供断言。
  • AssertJ Neo4j:为Neo4J类型(Path, Node, Relationship…)提供断言。
  • AssertJ DB:为关系数据库类型(Table, Row, Column…)提供断言、
  • AssertJ Swing:为Swing用户界面提供简单而直白的功能测试API。

本文只涉及到AssertJ CoreAssertJ Core 3.x需要Java 8以上的版本。

results matching ""

    No results matching ""