Как с помощь mockito можно сделать unit test для класса, который принимает данные из файла json?

205
11 июля 2018, 19:10

Есть класс, который выполняят логику деления в столбик, результаты вычисления сохраняются в его переменных.

public class IntegerDivisionLogic {
private Integer dividend;
private Integer divisor;
private int quotient;
private ArrayList<Integer> remaindersCollection = new ArrayList<>();

Дальше, класс IntegerDivisionLogic передает все данные в файл .json

    {
  "dividend": 12341234,
  "divisor": 1234,
  "quotient": 10001,
  "remaindersCollection": [
    1234,
    1234,
    1234,
    1234,
    0
  ]
}

После, класс рисовалка IntegerDivisionDrawer читает данные из .json занося их в свои поля.

public class IntegerDivisionDrawer {
private Integer dividend;
private Integer divisor;
private Integer quotient;
private ArrayList<Integer> remaindersCollection = new ArrayList<>();

На основе данных строит алгоритм отрисовки деления.

String drawIntegerDivision() {
    buildHead();
    buildBody();
    buildTail();
    return result.toString();
}

Надо написать юнит тесты для класса IntegerDivisionDrawer, используя mockito, (говорят так проще всего). Но я не знаю с чего начать писать и как к нему подступится. Для для класса IntegerDivisionLogic тесты написал.

Answer 1

Я вижу 2 темы для обсуждения:

  1. Дизайн классов
  2. Тестирование без mockito

Согласно лучшим традициям ООП ваш класс рисования должен принять готовый объект для рисования и не его ответственность заниматься парсингом json. И как следствие Вам уже не нужно дублировать все поля первого класса, а просто создать поле с типом первого класса:

class IntegerDivisionDrawer {
    private final IntegerDivisionLogic logic;
    IntegerDivisionDrawer(IntegerDivisionLogic logic) {
      this.logic = logic;
    }
}

Теперь и тестировать можно без mockito.

А чтение и парсинг json оформить можно в отдельном методе:

IntegerDivisionLogic getFromJsonFile(String fileName) {...}

Теперь на вызывающей стороне будет примерно так:

IntegerDivisionLogic logicFromFile = getFromJsonFile("/user/bob/my.json");
IntegerDivisionDrawer drawer = new IntegerDivisionDrawer(logicFromFile);
drawer.drawIntegerDivision();

Остаётся открытым вопрос а как же тестировать парсинг json? Создаёте строку json и передаёте в метод, на выходе ожидаете сконструированный объект. Ничего мокать в этом случае не нужно.

READ ALSO
Как добавить поле класса в сортировку?

Как добавить поле класса в сортировку?

Есть класс User, в котором заданы 6 имен и 6 фамилий и который создает случайного человека со случайным именем, фамилией и возрастомВ нем реализован...

175
Как массив разделить на два ряда?

Как массив разделить на два ряда?

интересует вопрос, каким образом можно массив разделить на два ряда в конечном отображении? На данный момент массив отображается одним рядом

186
Добавить данные в одно поле в Cloud Firestore в Android Studio

Добавить данные в одно поле в Cloud Firestore в Android Studio

Я новичок в андроид разработкеУ меня вопрос

186
Из Java FX в Maven

Из Java FX в Maven

Требуется собрать приложениеПри создании проекта выбирал java fx

136