問題描述
我有一個方法在一個類中返回 void,該類是我要測試的類的依賴項.
I have a method that returns void in a class that is a dependency of the class I want to test.
這個類很大,我只使用其中的一個方法.我需要為測試替換此方法的實現,因為我希望它做一些不同的事情,并且我需要能夠訪問此方法接收的參數.
This class is huge and I'm only using this single method from it. I need to replace the implementation of this method for the test as I want it to do something different and I need to be able to access the parameters this method receives.
我在 EasyMock 中找不到這樣做的方法.我想我知道如何使用 Mockito 通過使用 doAnswer
但除非絕對必要,否則我不想添加另一個庫.
I cannot find a way of doing this in EasyMock. I think I know how to do it with Mockito by using doAnswer
but I don't want to add another library unless absolutely necessary.
推薦答案
如果我理解你想做什么正確,你應該可以使用 andAnswer()
:
If I understand what you want to do correctly, you should be able to use andAnswer()
:
mockObject.someMethod(eq(param1), eq(param2));
expectLastCall().andAnswer(new IAnswer() {
public Object answer() {
//supply your mock implementation here...
SomeClass arg1 = (SomeClass) getCurrentArguments()[0];
AnotherClass arg2 = (AnotherClass) getCurrentArguments()[1];
arg1.doSomething(blah);
//return the value to be returned by the method (null for void)
return null;
}
});
EasyMock 用戶指南解釋道:
有時我們希望我們的模擬對象返回一個值或拋出一個在實際調用時創建的異常.從 EasyMock 2.2 開始,expectLastCall()
和 expect(T 值)
提供方法 andAnswer(IAnswer answer)
允許 [you] 指定接口的實現 IAnswer
用于創建返回值或異常.
Creating Return Values or Exceptions
Sometimes we would like our mock object to return a value or throw an exception that is created at the time of the actual call. Since EasyMock 2.2, the object returned by
expectLastCall()
andexpect(T value)
provides the methodandAnswer(IAnswer answer)
which allows [you] to specify an implementation of the interfaceIAnswer
that is used to create the return value or exception.
在 IAnswer
回調中,參數傳遞給模擬調用可以通過 EasyMock.getCurrentArguments()代碼>.如果你使用這些,像重新排序參數這樣的重構可能會破壞你的測試.您已收到警告.
Inside an IAnswer
callback, the arguments passed to the mock call are available via EasyMock.getCurrentArguments()
. If you use these, refactorings like reordering parameters may break your tests. You have been warned.
這篇關于EasyMock:無效方法的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!