2017-09-20 13 views
0

EasyMock 및 Spring을 처음 사용하는 경우.EasyMock 및 Spring Autowired

내가 테스트 클래스가 있습니다

@RunWith(EasyMockRunner.class) 
public class ProjectServiceTest { 

    private ProjectRepository projectRepositoryMock; 

    private ProjectService service; 

    @Before 
    public void setUp() throws Exception { 
     Project project = new Project("Project"); 
     project.setId(1); 
     EasyMock.expect(projectRepositoryMock.findOne(1)).andReturn(project); 
    } 

    @After 
    public void tearDown() throws Exception { 
    } 

    @Test 
    public void getProjectById() throws Exception { 

    } 

이 내 프로젝트 엔티티 : 그것은 또한 일반적인 getter 및 setter를 가지고

@Entity 
@Table(name = "Project") 
public class Project { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer id; 

    private String projectName; 


    public Project(){ 

    } 

    public Project(String projectName) { 
     this.projectNaam = projectName; 
    } 

.

내 저장소가 JpaRepository를 확장합니다.

그리고 이것은 내 ProjectService 클래스

@Service 
public class ProjectService { 

    @Autowired 
    private ProjectRepository projectRepository; 

    public ProjectService(){ 

    } 

    public Project getProjectById(Integer id){ 
     return this.projectRepository.findOne(id); 
    } 

    public void saveProject(Project project){ 
     this.projectRepository.save(project); 
    } 

    public void deleteProject(Integer id){ 
     this.projectRepository.delete(id); 
    } 

    public List<Project> getAllProjects(){ 
     return this.projectRepository.findAll(); 
    } 

    public Project findProjectById(Integer id){ 
     return this.projectRepository.findOne(id); 
    } 
} 

입니다 내 테스트 클래스를 실행하면 다음과 같은 에러가 발생합니다 java.lang.NullPointerException이 를 com.example.testclusters.Service.ProjectServiceTest.setUp에서 (ProjectServiceTest.java : 25)

나는 그것이 Project Entity의 Field id와 관련이 있다고 생각한다. EasyMock으로 어떻게이 서비스를 테스트 할 수 있습니까?

+0

'projectRepositoryMock' 변수를 할당 했습니까? – Tobb

답변

1

id 필드가 @GeneratedValue이라는 사실은이 작업과 관련이 없습니다.

제 생각 엔 ProjectServiceProjectReposistory을 인스턴스화하고 할당하는 것을 잊어 버렸기 때문에 NullPointerException이됩니다. 나는 EasyMock를 사용하지 않은,하지만 문서에서 당신이 이런 식으로 뭔가 누락 것으로 보인다, 또한

@RunWith(EasyMockRunner.class) 
public class ProjectServiceTest { 

    @Mock 
    private ProjectRepository projectRepositoryMock; 

    @TestSubject 
    private ProjectService service; 

를 생성 된 JPA ID와 세터를 제공하는 위험합니다. 당신은 생산 코드에서 그 id를 결코 설정하고 싶지 않습니다. IMO 그것은 setter를 제거하고, 테스트 목적으로 필요할 경우 반사를 사용하는 것이 좋습니다.

+0

감사합니다. 이제 그것은 햇빛처럼 작동합니다. – Urban

0

난 당신이 예를 읽을 제안 : 당신이 당신의 기대를 만들 수 있습니다 테스트에서

https://dzone.com/articles/easymock-tutorial-%E2%80%93-getting

@Before 
public void setUp() throws Exception { 
    //you need to initialize the objects and Mock 
    Project project = new Project("Project"); 
    project.setId(1); 
    EasyMock.createMock(ProjectRepository.class); 
} 

.

+0

노력에 감사드립니다! 그것에 관한 문서를 읽을 것입니다. – Urban