2017-09-20 1 views
0

Das erste Mal mit EasyMock und Spring zusammen.EasyMock And Spring Autowired

Ich habe die Testklasse:

@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 { 

    } 

Das ist mein Projekt Einheit:

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

Es auch die üblichen Getter und Setter hat.

Mein Repository erweitert nur das JpaRepository.

Und das ist meine ProjectService Klasse

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

Wenn ich meine Testklasse laufen bekomme ich den Fehler: java.lang.NullPointerException bei com.example.testclusters.Service.ProjectServiceTest.setUp (ProjectServiceTest.java : 25)

Ich denke, es hat etwas mit der Feld-ID auf der Projekt-Entität zu tun ist generiert. Wie ist es möglich, diesen Service mit EasyMock zu testen?

+0

Haben Sie Ihre 'projectRepositoryMock'-Variable zugewiesen? – Tobb

Antwort

1

Die Tatsache, dass das id Feld ist @GeneratedValue hat nichts damit zu tun.

Meine Vermutung ist, dass Sie vergessen haben, ProjectService und ProjectReposistory instanziieren und zuweisen, so dass eine NullPointerException. Ich habe nicht EasyMock, sondern aus der Dokumentation verwendet es scheint, dass Sie so etwas wie diese fehlen:

@RunWith(EasyMockRunner.class) 
public class ProjectServiceTest { 

    @Mock 
    private ProjectRepository projectRepositoryMock; 

    @TestSubject 
    private ProjectService service; 

Auch einen Setter auf Ihre erzeugte JPA ID ist gefährlich. Sie möchten diese ID NIE im Produktionscode angeben. IMO ist es besser, den Setter zu entfernen und Reflektion zu verwenden, wenn Sie für Testzwecke brauchen.

+0

Danke, ich habe es bemerkt. Jetzt funktioniert es wie ein Sonnenschein – Urban

0

Ich schlage vor, Sie das Beispiel zu lesen:

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

im Test Sie Ihre Erwartung schaffen.

+0

Danke für die Mühe! Ich werde die Dokumentation darüber lesen – Urban