我正在编写一个框架,jUnit
用于在 Java 中编写脚本测试。
它是基于任务的,每个任务都按顺序执行。这是一个简化的视图:
所有任务使用的界面看起来像
public interface Task {
void run(Callback callback);
}
接口为任务提供Callback
了一种告诉执行者它已经完成的方法。
public interface Callback {
void done();
void failed(String wtf);
}
我还为用户提供了到执行器、外部(物理)接口和设置类的接口。我称之为运行时环境,并抽象地实现:
public abstract class RuntimeEnvironment {
void execute(Task task) { ... }
void schedule(Task task, long delay) { ... }
SomeExternalInterface external();
Settings settings();
}
其中SomeExternalInterface
和Settings
是框架和实现用户都使用的接口。
框架可能会使用threadPoolSize
from Settings
、'initialize()' 和 'cleanUp()'等成员SomeExternalInterface
此类传递给任务的方式目前是通过实现任务类的构造函数。我不喜欢这个。Task
与在接口中指定 RuntimeEnvironment 相比,它产生了一个模棱两可的 api
为什么不把它添加到你问的任务界面中呢?喜欢
public interface Task {
void run(Callback callback, RuntimeEnvironment runtime);
}
因为,运行runtime.settings().getThreadPoolSize()
是好的(因为它在接口中指定),但是如果用户希望能够获得runtime.settings().getWonkyTimeUnit()
或者runtime.external().attemptToDefuseImminentExplotion()
他或她在各自接口的实现中指定呢?runtime.settings() 返回接口,而不是实现类。
所以 ...