Скорее всего, это не может быть должным образом издеваемо (и, следовательно, не проверено модулем). Дело в том, что вы на самом деле вызываете метод «this». Но вы не можете проверить какой-то объект ... и одновременно издеваться над ним.
Вы видите, если ваше производство код будет выглядеть следующим образом:
public String getVersion() {
return someObject.getClass().....
}
, то вы можете создать фиктивный объект; и вставьте это в свой класс версии. Но даже тогда метод getClass() равен final внутри java.lang.Object; и поэтому вы не можете насмехаться над этим.
[Разумные насмешливые рамки, такие как EasyMock или Mokito, расширяя классы и переопределяя методы, которые вы хотите контролировать. Существуют такие структуры, как PowerMock, которые выполняют манипулирование байтовым кодом и которые позволяют это издеваться, но вы никогда не должны использовать такие библиотеки; так как они имеют очень плохие побочные эффекты (например, нарушение большинство библиотек покрытия)]
Что может работать:
class Version {
private final Package packageForVersionCheck;
public Version() {
this(getClass().getPackage()));
}
Version(Package somePackage) {
this.packageForVersionCheck = ...
}
public String getVersion() {
return this.packageForVersionCheck.getImpl....
Теперь вы можете использовать инъекции зависимостей, чтобы обеспечить «высмеивали» пакет, который возвращает эту строку. Но хорошо, похоже, что много кода почти не выигрывает.
Короткий рассказ: иногда вы просто не можете написать разумный модульный тест. Затем сделайте следующее самое лучшее: создайте «функциональный» тест, который автоматически будет выполнен в настройке «как клиент»; и убедитесь, что у вас есть автоматическая настройка для запуска таких тестов.
Вы бы издевались над ним. –
Что вы испытываете? Если вы тестируете клиентов этого метода, подключите соответствующие макеты содержащего класса или интерфейса, который он реализует. Если вы тестируете реализацию метода, вы можете убедиться в том, что оно равно null или соответствует ожидаемому шаблону. Если вы тестируете 'getImplementationVersion()' себя, то остановитесь - это сторонний код, предположительно, с его собственными тестами. –