I am having a simple controller class
@RestController open class MyController() { @Autowired lateinit var myInterface: MyInterface @GetMapping(value = ["/v1/call-Api"], produces = ["application/json"]) fun getData():Response{ callFx() /// Here I have logic } fun callFx():String{ return myInterface.getmyStringData() } } Now Come to implementation part of
MyInterface
@Service class MyImpl: MyInterface { override fun getmyStringData(){ return "Some string" } } Please note that for MyInterface, I have only one implementation class.
Now come to Test case of controller class
class ControllerTest{ @Autowired lateinit var myIntF: Myinterface @Test fun controllerTest(){ Mockito.`when`(myIntF.getmyStringData()).thenReturn("Some mock string") // Some code over here } } After all these I am keep getting below error
org.mockito.exceptions.misusing.MissingMethodInvocationException: when() requires an argument which has to be 'a method call on a mock'. For example: when(mock.getArticles()).thenReturn(articles); Also, this error might show up because: 1. you stub either of: final/private/equals()/hashCode() methods. Those methods *cannot* be stubbed/verified. Mocking methods declared on non-public parent classes is not supported. 2. inside when() you don't call method on mock but on some other object. Even though code syntax belongs to Kotlin but i keep it simple to elaborate me scenario. Any JAVA guy can also help me.
Any help would be really helpful for me.
@Profilefor your tests? How do you defineMyinterfaceas a mock?