如何使用JUnit测试我的@NotEmpty注解

3

我们需要移除代码中使用的几乎所有框架。我从Hibernate的@NotEmpty开始。这是唯一从Hibernate使用的类,所以我们认为它是最容易解决的问题。

我编写了以下实现:

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上发布了它:我的Java注释示例
1个回答

7
我认为您的测试没有失败,因为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());
    }
}

我建议阅读这个教程

在语句“ValidatorFactory factory = Validation.buildDefaultValidatorFactory();”中,我得到了javax.validation.ValidationException: Could not create Configuration.
at javax.validation.Validation$GenericBootstrapImpl.configure
(Validation.java:175)
at javax.validation.Validation.buildDefaultValidatorFactory
(Validation.java:50)
- Cecil Westerhof
我按照你建议的方式做了一些事情,但我希望能做得更好。我检查确实只有一个ConstraintViolation,但有没有办法检查它是否是正确的ConstraintViolation? - Cecil Westerhof

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接