2017-12-12 11 views
0

コントローラクラスとそのメソッドをテストします。コントローラをテストするときにNullpointerexception EasyMock

私のコントローラメソッドは次のようになります。

@RequestMapping(value = "/updateUserStory/{usid}", method = RequestMethod.GET) 
public String updateUserStory(@PathVariable("trrid") Integer trrID, @PathVariable("usid") Integer userstoryID, Model model){ 
    UserStory userStory = this.userStoryService.getUserStoryById(userstoryID); 

    model.addAttribute("userstory", userStory); 
    model.addAttribute("trrID", trrID); 

    return "updateUserStory"; 
} 

私の試験方法は、次のようになります。

public void updateUserStory() throws Exception { 
    Model model = mockModel(); 

    UserStory userStory = new UserStory(); 
    userStory.setId(1); 

    EasyMock.expect(userStoryService.getUserStoryById(1)).andReturn(userStory); 
    EasyMock.replay(userStoryService); 

    String test = controller.updateUserStory(1, 1, model); 

    EasyMock.verify(userStoryService); 

    Assert.assertEquals("updateUserStory", test); 
} 

私はのためにuserStoryService

@Mock 
private UserStoryServiceImpl userStoryService; 

@TestSubjectのために上@Mockを追加しましたUserStoryController(in the te単にコントローラと呼ばれる)。

@TestSubject 
UserStoryController controller = new UserStoryController(); 

私はEasyMock.expectラインでNullPointerExceptionを得続けるテストを実行しています。これがどのように失敗しているのか分かりません。私は正しい方法を嘲笑している。

+0

'userStoryService'はどのように初期化されますか? – Kraylog

+0

@ NimrodArgovその部分を追加しました – Urban

+0

コントローラクラスはどのように 'userStoryService'にアクセスできますか?あなたはそれを渡しますか? 'コントローラ'はどこに作成されますか? – Kraylog

答えて

0

2つの理由が考えられます。

1.ランナーまたはルールを使用していません。モックを注入するために

は、EasyMockはJUnitのルール

@Rule 
public EasyMockRule mocks = new EasyMockRule(this); 

やランナーを必要と

@RunWith(EasyMockRunner.class) 
public class MyTest { 

2.フィールドタイプはUserStoryService

ないUserStoryServiceImplです。ですから、あなたはUserStoryServiceを嘲笑すべきです。

関連する問題