Java企业教程系列

Lambda Behave行为测试框架

  如果你是一个Java开发人员,你已经看到了在其他编程语言如spock 或 jasmine 这样可用的流畅的现代的规范框架,而现在 Lambda Behave 行为测试方式非常适合你。其目标是比现在使用的JUnit能使测试变成一个更加愉快的经历。

Lambda Behave是一个基于Java 8的行为测试框架,其特点是:

  • 如同英文一样可阅读性
  • 鼓励使用长和描述性的句子,而不是几句话进行测试。
  • API是流畅的,几乎可以通过IDE自动完成功能辅助发现完成。

public class StackSpec {{

    Stack<Integer> stack = new Stack<>();

    describe("a stack", it -> {

        it.shouldSetup(stack::clear);

        it.shouldTearDown(stack::clear);

        it.should("be empty when created", expect -> {

            expect.that(stack).isEmpty();

        });

每个标准测试都是以Suite.describe方法开始,然后你就可以借助IDE自动完成,下面是一些技术细节:

  • 如果你指定以恶搞属性property,使用it.should.
  • 如果你要描述一个熟悉期望值,使用expect.that. 这会给你一个流畅API限制值的类型,预期系统是基于hamcrest. 通过expect.that(value).is() 使用Hamcrest的规则匹配。
  • 如果你要setup 或 teardown,使用useit.shouldSetup 和 it.shouldTearDown.
  • 如果你要在每个suit中实现setup 或teardown,使用useit.shouldInitialize 和 it.shouldComplete.
  • 虽然Java 8 lambdafied APIs 并不能很好处理exception,但是你可以在我们回调中抛出exception,相应错误将会被报告。

Lambda Behave测试API是流畅且类型安全的,并不依赖反射魔术。

describe("a pair of numbers", it -> {

        it.uses(2, 4)

          .and(4, 8)

          .toShow("%d / %d is two", (expect, x, y) -> {

              expect.that(y / x).is(2);

          });

    });

Maven依赖配置:

<dependency>

    <groupId>com.insightfullogic</groupId>

    <artifactId>lambda-behave</artifactId>

    <version>0.1</version>

    <scope>test</scope>

</dependency>

案例example project.

通过下面代码可与Junit整合:

@RunWith(JunitSuiteRunner.class)
public class StackSpec {{

 

本测试框架下载地址:the github project