У меня есть структура, какMock метод суперкласса Тестовые Mockito
class A{
public String mymethod(){
//Some processing here
}
}
class B extends A{
public void mySomeMethod(){
String myToken = super.myMethod();
//processing
}
}
Теперь я хочу, чтобы дразнить вызов упомянутый здесь Строка myToken = super.myMethod(); и вернуть константу String в мой тестовый класс. Я пытался делать
Mockito.doReturn("gdgwdgweg23et287").when((A)bSpy).myMethod();
Но это разве помогает как метод все еще вызывался. Может кто-нибудь предложить подход здесь
Из интереса, * почему * вы пытаетесь издеваться над этим? Если 'mymethod' вызывает какую-то другую зависимость, можете ли вы издеваться над этим? –
единичный тестовый пример должен иметь свой объем, ограниченный этим конкретным методом, и я стараюсь избежать любого вызова внешнего метода. метод выше пытается сгенерировать некоторый токен, основанный на некоторой логике, которая является моим случаем, и я стараюсь избегать этого, что ИМО полностью в порядке. Вопрос здесь не в том, является ли я вне интереса или нет, то в том, как издеваться над методом, который вызывается с помощью супер, если бы этот метод был абстрактным, а его реализация была в классе B, я мог бы издеваться над ним легко, но так как реализация этот метод будет распространен в разных классах, я сделал это так. – vaibhav
Я предлагаю быть прагматичным, а не догматичным. Идея о том, что единичный тест не должна заканчиваться вызовом * любого * кода, отличного от метода, который он пытается тестировать, редко действительна в действительности - вы бы хотели избежать вызова методов String, издевательства подстроки и т. Д.? Если вы действительно хотите продолжать идти по этому пути (и я бы рекомендовал, чтобы вы этого не сделали), я бы * ожидал, что это будет возможно с кодом, например, вы уже опубликовали - в конце концов, метод isn 't 'final'. Это поможет, если вы разместите * полный * пример как производственного кода, так и теста, чтобы мы могли воспроизвести его. –