如何使用JUnit

时间:2015-07-17 08:42:56

标签: java junit annotations

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

1 个答案:

答案 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