Проблема в том, что используемый объект OffroadTransformer
не имитируется. Ваша тестовая установка создает макет в поле transformer
, но этот макет не тот, который используется методом, и это подтверждает вашу гипотезу.
Используемая вами настройка работает с классами, которые имеют имитируемые объекты как поля экземпляра, например:
public class Transformer {
//injected, initialized inline, etc.
private OffroadTransformer transformer;
public void transform(final Car car) throws IOException {
switch (car.getType()) {
case OFFROAD:
OffroadCar offroadCar = this.transformer.transform(car);
// do something with offorad car
break;
...
}
}
}
В такой класс Mockito внедрит макет, и выполнение метода будет использовать этот макет, созданный Mockito.
Если вы этого не сделаете хотите использовать эту настройку, тогда вы можете изучить что-то вроде , имитирующего конструктор вашего OffroadTransformer
.
С другой стороны, однако, это довольно распространенная практика для factory такие классы, как OffroadTransformer
, не имеют состояния и используются как одиночные. Поэтому более естественно следовать описанной выше настройке и позволить Mockito сделать инъекцию за вас.