创建断言

Creating assertions

所以我想创建一个断言 class,就像 AssertJ 的工作方式一样。我在开始时遇到问题。


    public class Assertion {
    
        static object assertThis(Object o){}
        static Integer assertThis(int i){}
        static String assertThis(String s){}
        static Object isNotNull(){}
    
    }

我的问题是 JUNIT 如何接收特定的 object/string/int 并存储它?假设我传入一个 Assertion.assertThis("hello").isNotNull() 我应该得到一个字符串对象。我需要一个字段来存储目标文件吗?通过 assertThis 方法传递的不同对象如何改变它?

我不认为 JUnit 是这样工作的(但是 AssertJ does)。

但是,是的,您使用静态方法创建实例并保存值,然后针对该值执行断言。

对静态方法(也称为工厂方法)的新调用将创建不同的实例。

这是一个非常简单的例子:


class Assert {

   // Thing we're going to evaluate
   private String subject; 

   // Factory method. Creates an instance of `Assert` holding the value.
   public static Assert assertThat(String actual) {
      Assert a = new Assert();
      a.subject = actual;
      return a;
   }

   // Instance method to check if subject is not null
   public void isNotNull() {
     assert subject != null;
   }
}

// Used somewhere else...
import static Assert.assertThat;

class Main {
  public static void main( String ... args ) {
      assertThat("hello").isNotNull();
  }
}