Предположим, у меня есть класс Foo
, экземпляр которого создается только с экземпляром класса Bar
:
public Foo(Bar x) {
this.a = x.a();
this.b = x.b();
...
}
Теперь я хотел бы протестировать Foo
, предполагая, что создать экземпляр Bar
с желаемым состоянием сложно. В качестве дополнительного ограничения поля a, b, ...
объявлены как окончательные, поэтому установщики для этих полей недоступны.
Можно было бы создать дополнительный конструктор в Foo:
protected Foo(A a, B b, ...) {
this.a = a;
this.b = a;
...
}
Этот конструктор используется только во время тестирования, которое я объявил бы в комментарии к этому конструктору.
Вопрос: Это запах кода?
Другое решение, о котором я думал, это издевательство Bar
. Интересно, это лучшая практика в этом случае?