Java8函数式编程入门 互动版

JUnit 5

JUnit 5完全使用当前的Java 8重写了所有代码,因此JUnit 5的运行条件是Java 8环境。 JUnit 5允许在断言中使用Lambda表达式,这个特性可以从开源的断言库AssertJ中可以看到。

JUnit 5的测试看上去与JUnit 4相同:同样是创建类,添加测试方法,使用@Test注释。但是,JUnit 5还提供了全新的一套注释集合,而且断言方法从JUnit 4的org.junit.Assert包移到了JUnit 5的org.junit.gen5.api.Assertions包。

import org.junit.gen5.api.Assertions;
import org.junit.gen5.api.Test;
public class Test {
  @Test
  public void test()  {
    Assertions.assertEquals(2 * 5, 10);
    Assertions.assertTrue(1 > 2);
  }
}

Unit 5的断言方法与JUnit 4相似,断言类提供了assertTrue、assertEquals、assertNull、assertSame以及相反的断言方法。不同之处在于JUnit 5的断言方法支持Lambda表达式。而且还有一个名为分组断言(Grouped Assertions)的新特性。 分组断言允许执行一组断言,且会一起报告。

@Test
  public void lambdaExpressions() {
    // lambda expression for condition
    assertTrue(() -> "".isEmpty(), "string should be empty");
    // lambda expression for assertion message
    assertEquals("foo", "foo", () -> "message is lazily evaluated");
  }

  @Test
  public void groupedAssertions() {
    Dimension dim = new Dimension(100, 60);
    assertAll("dimension", 
        () -> assertTrue(dim.getWidth() == 100, "width"),
        () -> assertTrue(dim.getHeight() == 60, "height"));
  }

  @Test
  public void exceptions() {
    // assert exception type
    assertThrows(RuntimeException.class, () -> {
      throw new NullPointerException();
    });
    // assert on the expected exception
    Throwable exception = expectThrows(RuntimeException.class, () -> {
      throw new NullPointerException("should not be null");
    });
    assertEquals("should not be null", exception.getMessage());
  }