2016-04-28 10 views
0

私は安らかなサービスを持っていると私は、データベースに接続せずにテストユニットにしたい:サービスが呼び出されますが、私の問題は、このコード行であるなぜmockMVCとmockitoが一緒に機能しないのですか?したがって、私は、コードのこの作品を書かれている、

@Before 
public void setup() throws Exception { 
    this.mockMvc = webAppContextSetup(webApplicationContext).build(); 

    adminDao = mock(AdminDaoImpl.class); 
    adminService = new AdminServiceImpl(adminDao); 
} 

@Test 
public void getUserList_test() throws Exception { 
    User user = getTestUser(); 
    List<User> expected = spy(Lists.newArrayList(user)); 

    when(adminDao.selectUserList()).thenReturn(expected); 


    mockMvc.perform(get("/admin/user")) 
     .andExpect(status().isOk()) 
     .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) 
     .andExpect(jsonPath("$", hasSize(1))) 
     ;   
} 

when(adminDao.selectUserList()).thenReturn(expected); 

は機能しません。実際にはadminDao.selectメソッドが呼び出され、結果がデータベースから取得されます。私は望んでいない。 メソッドコールをどうやって模擬することができますか?

+1

を彼らは一緒に完全に正常に動作していますが、文脈の外でクラスをからかっている、どのようにコンテキストは、それらのモックについて知っておくべき? –

+0

@ M.Deinumあなたは正しいです、私はwebApplicationContextを取得することを知っていますが、実際には私はmockMVCコンテキスト内でそれらを模擬する方法を見つけることができません。どうすれば修正できますか? – Shilan

+0

実際のBeanをmockで上書きする構成クラスを作成します。私たちのテストクラスにモックを注入して、あなたが望む動作を記録してください。 –

答えて

1

@Mに感謝します。

@Configuration 
public class TestContext { 

@Bean 
public AdminDaoImpl adminDao() { 
    return Mockito.mock(AdminDaoImpl.class); 
} 

@Bean 
public AdminServiceImpl adminService() { 
    return new AdminServiceImpl(adminDao()); 
}  
} 

、その後、私のテストクラスで、私は私が必要とするテストクラスのセットアップで言及する

@ContextConfiguration(classes = {TestContext.class}) 

価値を持つクラスを注釈付き:Deinum、私は私の問題を修正し、私はTestContextの設定ファイルを追加しました漏れを防止するためにmockedClassをリセットするには:

@Before 
public void setup() throws Exception { 
    Mockito.reset(adminDaoMock); 

    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); 
} 
関連する問題