2013-01-04 61 views
0

我使用Jmock編寫Spring的控制器測試。控制器使用接口進行數據庫操作。這些是服務類。我可以通過setter將它們jmock並傳遞給控制器​​。Jmock,測試中的Spring和Anotated資源

實際控制人有標有@ Reource-anotation

@Resource 私人服務業務的業務;

測試 最終服務服務= context.mock(Service.class); controller.setService(service); controller.CallMethodToTest();

在控制器代碼服務對象通常是用Spring的@Resource anotation.The問題intialized是當控制器在一些內部呼叫使用相同的服務,例如驗證或內部類。

真實的驗證還標有@ Reource-anotation

@Resource 私人服務業務的業務;

在測試I可以e.g介紹它的驗證對象,設置服務並將它傳遞給控制器​​。

MyValidator validator = new MyValidator(); 
validator.setService(service); 
controller.setValidator(validator); 

假設驗證器。驗證調用service.getSomething。我需要爲getSomething()編寫Expectations;在控制器中也可以調用相同的方法。

 context.checking(new Expectations() { 
     { 
      allowing(service).getSomething(); 
      will(returnValue(mockData)); 

     } 
    }); 

儘管允許基數的,這樣的情況會導致

allowed, already invoked 1 time 

這是一個常見的場景,我無法提供更具體的代碼。我想這與控制器和驗證器服務方法調用有關。任何人都可以給我一個修改這個提示嗎?

+0

對不起,但你的問題很難理解,說實話我不明白你的問題或情況。 – Ralph

+0

如何使用相同的mockobject控制器和控制器屬性? – mjgirl

+0

我仍然認爲你沒有貶低你的問題:「問題是控制器在內部調用中使用相同的服務,例如驗證器或內部類。」 - 有一些東西缺失。 - 無論如何,我希望我理解你的權利,你想創造兩個同班同學。我已發佈了有關此主題的答案。 – Ralph

回答

0

如果您使用jMock,那麼每一個模仿對象都有一個名字。這個名字必須是唯一的。

如果您使用的方法Mockery.mock(Class<T> typeToMock)然後名稱將從類名來的。所以你可以用這種方法只爲每個類創建一個模擬。

如果您需要在同一類的幾個不同的嘲笑,然後用Mockery.mock(Class<T> typeToMock, String name)代替,併爲每個模擬一個不同的名稱。