我们必须删除代码中使用的几乎所有框架。我已开始 使用来自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上发布:My Java annotation example
答案 0 :(得分:2)
我认为你的测试不会失败因为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