Как мне написать субъекты Google-Truth для иерархии объектов, которая использует интерфейсы для множественного наследоваJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как мне написать субъекты Google-Truth для иерархии объектов, которая использует интерфейсы для множественного наследова

Сообщение Anonymous »

Ситуация
Я пишу тесты для личного проекта (на Java17 с использованием JUnit5/Jupiter и Google Truth), где использую множественное наследование интерфейсов для определения классов. Например:
Пример

Код: Выделить всё

public interface Taggable {
public String getTagName();

public String getSimpleContent();

// ... and more
}

public interface CreatureContainer {
public Collection getCreatures();

public boolean addCreature(Creature c);

public void announce(String message);

// ... and more
}

public class Area implements Taggable, CreatureContainer { // possibly more
private String name;
private Set creatures;

// Constructor etc

@Override
public String getTagName() {
return this.getClass().getName();
}

@Override
public String getSimpleContent() {
return this.name;
}

@Override
public Collection getCreatures() {
return creatures;
}

// ...etc

}
Параметры
Поскольку класс субъекта Google Truth представляет собой КЛАСС и нет интерфейсов, которые можно было бы использовать для отражения моей структуры, я не могу написать что-то вроде:< /p>

Код: Выделить всё

public class TaggableSubject extends Subject {};
public class CreatureContainerSubject extends Subject {};
public class AreaSubject extends TaggableSubject, CreatureContainerSubject {}; // ERROR!!
Я вижу несколько вариантов:
Вариант 1
Я пишу одну тему для каждого из тегов, CreatureContainer и Area. В AreaSubject я включаю такие методы, как

Код: Выделить всё

public TaggableSubject asTaggable() {
return check("this").that(actual); // just give it a raw actual?
}

public CreatureContainerSubject asCreatureContainer() {
return check("this").that(actual);
}
Вариант 2
Я пишу только AreaSubject и включаю метод для каждой вещи из унаследованных интерфейсов.
Например:

Код: Выделить всё

public StringSubject tagName() {
return check("getTagName()").that(actual.getTagName());
}

// or similarly
public void hasTagName(String tagName) {
this.tagName().isEqualTo(tagName);
}

public void hasCreature(Creature c) {
check("getCreatures()").that(actual.getCreatures()).contains(c);
}
Вопрос
Чтобы двигаться дальше, я выберу первый вариант, но мне все равно хотелось бы знать:< /p>
Какой из вариантов больше соответствует парадигме Google Truth? Или есть лучший вариант?
Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/785 ... uses-inter
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»