Когда я создаю unittest для MyClass и хочу смоделировать SomeOtherClass внутри, я обычно внедряю его в конструктор, который должен использоваться только для unittesting. Этот конструктор может быть protected
или package-private
(в отличие от конструктора public
по умолчанию), поэтому мы уже уверены, что он не может быть вызван в большинстве других мест в нашем проекте.
Однако аннотация Android @RestrictTo
может улучшить это еще больше! Одной из областей, которые он может ограничить, является RestrictTo.Scope.TESTS
, и это то, что я хочу! Или, по крайней мере, я так думал ..
Я также вызываю этот конструктор в конструкторе по умолчанию самого MyClass (чтобы предотвратить дублирование в обоих конструкторах). Это вызывает предупреждение на this
, потому что - конечно - оно не вызывается внутри unittest:
public MyClass()
{
this(new SomeOtherClass()); // <<< Warning here
}
@RestrictTo(RestrictTo.Scope.TESTS)
MyClass(SomeOtherClass someOtherClass)
{
this.someOtherClass = someOtherClass;
}
По-моему, было бы странно, если бы сам класс не мог вызывать свои собственные методы / конструктор. Я правильно использую это? Есть ли способ предотвратить это предупреждение, не дублируя содержимое конструкторов? Или есть какой-то другой способ ограничить частный конструктор пакета от вызова внешних тестов (за исключением самого класса)?
пс. Я также попытался определить несколько областей, как показано ниже, но похоже, что он ведет себя как &&
, а не ||
@RestrictTo({RestrictTo.Scope.TESTS, RestrictTo.Scope.SUBCLASSES})