2012-11-10 36 views
0

我正在測試我的userService類方法,但我測試的方法調用另一個方法。測試我的UserService類,但需要模擬一個同時被調用的方法

@Test 
public void testSomething() { 
    HelloWorldResponse hwResponse = ....; 

    expect(userDaoMock.helloWorldCall(....).andReturn(hwResponse); 

    reploy(); 

    UserResponseCode response = userService.register(user); 

    assertEquals(UserResponseCode.OK, response); 
} 

現在說我的註冊方法向我userService類的另一種方法的調用,我怎麼能嘲笑這一呼籲?

從我的理解我不能這樣做,因爲我沒有包裝整個userService類在模擬權?

更新

當我調試我的註冊方法JUnit測試,我看到:

SomeThing thing = helloWorldCall(...); // userService.helloWorldCall(...); 

現在的方法helloWorldCall剛剛返回什麼userDAO的回報,我已經嘲笑,在我的測試,但由於某種原因,當我追蹤執行時它返回null,所以thing == null。

爲什麼它是空的,它不應該有我的模擬返回的值嗎?

UserService#helloWorldCall代碼在下面,同樣它只是返回userDao返回的內容,我再次嘲笑,因爲您可以看到上面返回的那個響應我硬編碼在我的單元測試中。爲什麼當我追蹤/調試單元測試時它是空的?

public HelloWordResponse helloWorldCall(...) { 
    return userDao.helloWorldCall(..) 
} 
+1

爲什麼你需要模擬出方法,如果它也在userService中? – jeff

+0

@jeff看到我的更新,即使我嘲笑響應,返回值爲空。 – Blankman

+0

將userDaoMock連接到正在測試的userService的代碼在哪裏? – jeff

回答

0

我使用的是mockscontrol

private IMocksControl mockMaker; 

所以我必須使用

mockMaker.replay(); 
mockMaker.verify(); 

它現在因爲我有很多不同的模仿對象。

0

在這裏殺死了範圍,但是你可以使用Spring並與不同的上下文環境中運行。你的實際服務和你模擬實現相同的接口。在你的測試中,你可以連接模擬器並在運行時執行實現。

相關問題