я считаю полезным, когда я вынужден работать с API, опираясь на наследование от абстрактных классов и/или унаследованного кода, работающих с nonmockable статических классов (один реальный пример - DAO).
Частичное издевательство (в смысле использования средства шпиона от Mockito) позволяет вам обманывать вызовы унаследованным методам в первом случае или обертывать вызовы статическим методам, которые вы вынуждены использовать в обычных методах, которые вы можете издеваться, проверять и т. д.
Как правило, вы должны проектировать и писать код таким образом, чтобы вам не понадобилось это (инъекция зависимости, отдельная ответственность за класс и т. д.). Но время от времени это полезно.
быстрый и грубый пример, чтобы визуализировать статический пример API:
class BigUglyStaticLegacyApi {
public static Foo someStaticMethodFetchingFoo() {...}
}
class Bar {
public void someMethodYouTest() {
Foo foo = getFoo();
//do something with Foo (a FooBar, for example :))
}
/*this one you mock via spying - not the most elegant solution,
but it's better than nothing */
@VisibleForTesting
protected Foo getFoo() {
return BigUglyStaticLegacyApi.someStaticMethodFetchingFoo();
}
}