How to set expectation to params passed to void methods using EasyMock
easymock
Solution
Starting from the answer in this answer: EasyMock: Void Methods, you can use IAnswer.
// create the mock object
DependentMain dependentMain = EasyMock.createMock(DependentMain.class);
// register the expected method
dependentMain.voidCalled(mainBean);
// register the expectation settings: this will set the name
// on the SampleMainBean instance passed to voidCalled
EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
@Override
public Object answer() throws Throwable {
((SampleMainBean) EasyMock.getCurrentArguments()[0])
.setName("Sathiesh");
return null; // required to be null for a void method
}
});
// rest of test here
Problem
I am using EasyMock and EasyMock CE 3.0 to mock dependent layers and test my classes. Below is the scenario for which I am not able to find any solution I have class to be tested, which calls a dependent class void method that takes an input param, and alters the same param. The method that I am testing is doing some operations based on the altered param, which I have to test now for various scenarios Consider the below sample, where I have tried to put the same scenario ``` public boolean voidCalling(){ boolean status = false; SampleMainBean mainBean = new SampleMainBean(); dependentMain.voidCalled(mainBean); if(mainBean.getName() != null){ status = true; }else{ status = false; } return status; } ``` And the dependentMain class the below method ``` public void voidCalled(SampleMainBean mainBean){ mainBean.setName("Sathiesh"); } ``` To have full coverage, I need to have 2 test cases to test both the scenarios where true and false are returned, but I always get false as I am not able to set the behaviour of the void method to alter this input bean. How can I get a true as result in this scenario using EasyMock Thanks in advance for any help.