I am learning Junit with mockito. I got a scenario where I need to write the testcase for a function which calling other function and using that function return data.
I have a two functions called courseComplete
and courseCount
in the class StudentHelper
courseComplete :
public String courseComplete(Student std) { int count = courseCount(std); //Calling another function if(count >= 2) { return "Courses Registered"; } else { return "Courses Not Registered"; } }
courseCount :
public int courseCount(Student std) { return std.getCourses.size(); // Student class contains a courses list. }
Now I need to write unit testcases for the courseComplete
function. How can I pass the value to the count variable without calling the courseCount
method in courseComplete
Function? Is it possible with mockito? I tried by the following code :
when(StudentHelper.courseCount(std)).thenReturn(2); // std is the object which I created in the testclass.
But this is not working. Please anyone help me. Thanks.
Advertisement
Answer
You need to create a mock instance for the class under test:-
final StudentHelper mockHelper = mock(StudentHelper.class);
Then you can go ahead and use ArgumentMatchers to mock your behaviour:-
final Student expected = new Student("Dave"); when(mockHelper.courseCount(eq(expected)).thenReturn(2);
The above example will only execute when the method is called with your expected value.
Note that you can use matchers such as any(Student.class)
to provide more flexibility.