2015-07-17 5 views
0

Мы должны удалить почти все фреймворки, используемые в коде. Я начал с @NotEmpty из Hibernate. Это был единственный класс, который использовался от Hibernate, так что мы видели низко висящие фрукты.Как протестировать мой @NotEmpty с помощью JUnit

я написал следующую реализацию:

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); 
    } 
} 

Я бы ожидал, что этот тест не пройдет, но он это сделает. Так ясно, что я что-то не так, но я понятия не имею, что. (Это первое раз, когда я действительно работаю с аннотациями.) Я сделал несколько Googling, но до теперь безрезультатно. Так что если кто-то может мне точку в правильном направлении ...

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

я написал лучшую версию и опубликовал его на GitHub: My Java annotation example

ответ

1

Я думаю, что ваш тест не подведет, потому что 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

+0

Об утверждении «ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Я получаю javax.validation.ValidationException: Не удалось создать конфигурацию. в javax.validation.Validation $ GenericBootstrapImpl.configure (Validation.java:175) в javax.validation.Validation.buildDefaultValidatorFactory (Validation.java:50) –

+0

Я читаю учебник. Спасибо за ссылку. –

+0

Я делаю что-то вроде вас, но я хотел бы сделать это еще немного лучше. Я проверяю, что существует только одна ConstraintViolation, но есть ли способ проверить, что это правильная ConstraintViolation? –