Android-аннотация ограничивает конструктор юнит-тестами и тем же классом - PullRequest
0 голосов
/ 02 ноября 2018

Когда я создаю 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})
...