也提供一套验证该接口行为的测试类。因此每个实现者需要提供他们自己的实现,并且运行API设计者提供的测试,来保证实现类不仅是类型安全的,也是行为安全的。TestedBy传递给测试类一个被测试接口的实体类,并调用接口定义好的测试。

  这是一个使用TestedBy的例子:我们已经添加了@TestedBy注释在API接口,并提供一个@BeforeTestedBy注释来提供一个接口的实例。TestedBy将在实现类APIImplOne和APIImplTwo上运行shouldAddTwoAndThree,测试在第一个类上成功而在第二个类上失败。

  Java代码

1. public interface APIInterface {

  2. @TestedBy( testClass = "it.javalinux.testedby.APITest", testMethod = "shouldAddTwoAndThree" )

  3. public int add(int a, int b);

  4. }

  5.

  6. public class APIImplOne {

  7. public int add(int a, int b) {

  8. return a + b;

  9. }

  10.

  11. public class APIImplTwo {

  12. public int add(int a, int b) {

  13. return a - b;

  14. }

  15.

  16. public class APITest {

  17.

  18. private APIInterface instance;

  19.

  20. @BeforeTestedBy

  21. public beforeTestedBy(APIInterface instance) {

  22. this.instance = instance;

  23. }

  24.

  25. public void shouldAddTwoAndThree() {

  26. assertThat(instance.add(3,2), is(5));

  27. }

  28.

  29. }
   当然,我使例子尽量简单,但是TestedBy有更多的注释,比如当没有参数的构造函数的简单反射调用时,被测试类的实例工厂能被指定,这些注释还远远不够。
 2、在当前工作的类上运行测试

  你写一个测试类来检验代码的正确性。很多时候,你写单元测试来保证代码的改变不会影响正在工作的代码,或者其他同事正在用的代码。你如何做呢?你可能改变你的代码,然后跑所有的涉及到修改的类的测试类。然后,后你跑所有的测试来保证你没有影响到其他代码。

  那么让你的IDE第一步做什么呢?它编译你修改的类,并同时运行对应的测试类?既然你或者你的IDE能够运行测试类,testedBy让这个成为可能。一个eclipse插件能做这些工作,针对你修改的类来运行相应的测试类,以验证没有破坏你的测试集,不仅仅是在编译阶段,也能在你写代码的时候。