2017-09-20 19 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 { 

    } 

は、これは私のプロジェクトの実体である:

@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を拡張するだけです。

そして、これは私が私のテストクラスを実行すると、私はエラーを取得

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

私ProjectServiceクラスです:com.example.testclusters.Service.ProjectServiceTest.setUpでjava.lang.NullPointerExceptionが (ProjectServiceTest.java :25)

プロジェクトエンティティのフィールド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の場合は、セッターを削除し、テスト目的のために必要な場合はリフレクションを使用する方が良いです。

+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