如何使用 JUnit 测试我的@NotEmpty

How to test my @NotEmpty with JUnit

我们必须删除代码中使用的几乎所有框架。我已开始 使用来自 Hibernate 的 @NotEmpty。这是唯一使用的 class 休眠,我们认为很容易实现。

我写了下面的实现:

import        java.lang.annotation.Documented;
import static java.lang.annotation.ElementType.FIELD;
import        java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import        java.lang.annotation.Target;

import        javax.validation.Constraint;
import        javax.validation.constraints.NotNull;
import        javax.validation.constraints.Size;
import        javax.validation.ReportAsSingleViolation;

@Documented
@Constraint(validatedBy = {})
@Target({ FIELD })
@Retention(RUNTIME)
@ReportAsSingleViolation
@NotNull
@Size(min = 1)
public @interface NotEmpty {
    public abstract String message() default "Field has to be filled";
}

当然也应该测试它。所以我写了下面的测试:

import org.junit.Test;

class NotEmptyClass {
    @NotEmpty
    String notEmpty;

    NotEmptyClass(String value) {
        notEmpty = value;
    }
}

public class NotEmptyTest {
    @Test
    public void firstTest() {
        new NotEmptyClass(null);
    }
}

我希望这个测试不会通过,但它确实通过了。很明显我是 做错了什么,但我不知道是什么。 (这是第一 是我真正使用注释的时候了。)我做了一些谷歌搜索,但直到 现在无济于事。所以如果有人能给我指明正确的方向……

============

我写了一个更好的版本并发布在 GitHub 上:My Java annotation example

我认为您的测试不会失败,因为 1) 您实际上并没有验证您只是初始化它的对象,并且 2) 您没有做出任何断言

public class NotEmptyTest {
    @Test
    public void firstTest() {
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();

        NotEmptyClass obj = new NotEmptyClass(null);

        // Validate the object
        Set<ConstraintViolation<NotEmptyClass>> constraintViolations = validator.validate(obj);

        // This is the line that will cause your unit test to fail if there are not any violations
        Assert.assertEquals(1, constraintViolations.size());
    }
}

我建议阅读 this tutorial