2014-11-15 7 views
2

Я хочу написать тестовые примеры для cdi. Я использовал @inject в своем dao. Может ли кто-нибудь помочь мне написать тестовые примеры для cdi.I попробовал приведенный ниже код. Но это не работает. Пожалуйста, помогите мне.Как написать тестовые примеры Junit для CDI?

public class StudentTest { 

    StudentService stuService; 

    StudentDAO stuDAO; 

    StudentVO stuVo; 

    @Before 
    public void setUp() throws Exception { 

     System.out.println("In Setup"); 

     stuVo=new StudentVO(); 

     stuService=new StudentService(); 

     stuDAO=Mockito.mock(StudentDAO.class); 

     stuVo.setStudId("123"); 

     stuVo.setName("user1"); 

     Mockito.when(stuDAO.getStudent(stuVo.getStuId())).thenReturn(student); 
    } 

    @Test 
    public void getStudent() throws DataAccessException { 

     StudentVO stVO=stuService.getStudent(123); 

     Assert.assertEquals("123", stVO.getStuId()); 
    } 
} 

My Service Класс

public class StudentService { 

    @Inject 
    StudentDAO stuDao; 

    public StudentVo getStudent(String id){ 

     return stuDao.getStudent(id); 

    } 

} 

В аварии проследить его просто показывает, как «java.lang.NullPointerException

at com.stu.StudentService.getStudent(StudentService.java:104) 
at com.stu.junit.POCJunit.getgetStudent(StudentTest.java:21) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)... 
+0

Отступа вашего кода. Это невозможно. –

+0

, пожалуйста, проверьте сейчас. – stackUser44

+0

Уже я издевался над моим Dao как «stuDAO = Mockito.mock (StudentDAO.class)» в методе setUp(). – stackUser44

ответ

5

Я решил это, поместив следующий код

@Mock 
StudentDAO stuDAO; 

@InjectMocks 
StudentService stuService; 

And in setUp() method I have written 

MockitoAnnotations.initMocks(this); 
0

Вы никогда не устанавливающего дао издеваются в вашей боб службы. Нет рамки для инъекций, поэтому дао просто остается «нулевым», и тест терпит неудачу. Вы можете либо установить dao mock напрямую, так как вы сделали полевой пакет видимым или использовали отражение.

Мой любимый способ: Посмотрите на http://www.needle4j.org/. Его контейнерная агностическая тестовая основа, направленная на упрощение тестирования DI.

Базовое правило: всякий раз, когда вы вводите что-то, игла4j создаст для вас макет.

Смежные вопросы