如何使用 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
我们必须删除代码中使用的几乎所有框架。我已开始 使用来自 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