一、项目概述
1.原项目github地址:https://github.com/j-easy/easy-flows.git
2.easy-flows可以用非常简易的api创建常用的可组合的工作流。涵盖了四种逻辑的处理:
3.可以用如下方式构造循环工作流:
RepeatFlow repeatFlow = RepeatFlow.Builder.aNewRepeatFlow()
.named("repeatflow")
.repeat(work)
.until(WorkPredicate.ALWAYS_FALSE)
.build();
二、项目亮点
由于项目代码量小,决定手写一下慢慢品。个人感觉,easy-flows最好玩的地方在于Builder的构造。通过在Builder模式中进一步定义接口,细化了流程中的语义和步骤哦。
拿比较简单的顺序流SequentialFlow举例,通过ExecuteStep接口中的execute方法返回ThenStep。限制了链式调用过程中的then()方法在execute()之后。
public static class Builder {
private Builder() {
// force usage of static method aNewSequentialFlow
}
public static NameStep aNewSequentialFlow() {
return new BuildSteps();
}
public interface NameStep extends ExecuteStep {
ExecuteStep named(String name);
}
public interface ExecuteStep {
ThenStep execute(Work initialWork);
ThenStep execute(List<Work> initialWorkUnits);
}
public interface ThenStep {
ThenStep then(Work nextWork);
ThenStep then(List<Work> nextWorkUnits);
SequentialFlow build();
}
private static class BuildSteps implements NameStep, ExecuteStep, ThenStep {
private String name;
private final List<Work> works;
BuildSteps() {
this.name = UUID.randomUUID().toString();
this.works = new ArrayList<>();
}
……
@Override
public SequentialFlow build() {
return new SequentialFlow(this.name, this.works);
}
}
调用时如下:
SequentialFlow sequentialFlow = SequentialFlow.Builder.aNewSequentialFlow()
.named("testFlow")
.execute(work1)
.then(work2)
.then(work3)
.build();
三、关于Mockito
1.Mockito 是一个强大的用于 Java 开发的模拟测试框架, 通过 Mockito 我们可以创建和配置 Mock 对象, 进而简化有外部依赖的类的测试.
2.使用 Mockito 的大致流程如下:
- 创建外部依赖的 Mock 对象, 然后将此 Mock 对象注入到测试类中.
- 执行测试代码.
- 校验测试代码是否执行正确.
3.Mockito 会追踪 Mock 对象的所用方法调用和调用方法时所传递的参数. 我们可以通过 verify() 静态方法来来校验指定的方法调用是否满足断言.
Mockito.verify(work, Mockito.times(n)).execute(workContext);
验证execute方法是否执行了n次;
Mockito.verify(nextOnPredicateSuccess, Mockito.times(1)).execute(workContext);
验证nextOnPredicateSuccess.execute()是否执行了1次;
Mockito.verify(nextOnPredicateFail, Mockito.never()).execute(workContext);
验证nextOnPredicateFail是否一次都没执行。
作者:陈敬(公众号:敬YES)
出处:http://www.cnblogs.com/janes/
博客文章仅供交流学习,请勿用于商业用途。如需转载,请务必注明出处。