Как проверить простой метод, используя Mockito - PullRequest
2 голосов
/ 13 мая 2019

Я новичок в тестировании с использованием Java, поэтому меня немного смущает, как написать правильный модульный тест для метода без параметров и возвращаемого значения.В целом фрагмент выглядит следующим образом:


public class SplitterService {

private SentenceDAO sentenceObject;
private ObjectToXML objectToXML;
private ObjectToCSV objectToCSV;

public SplitterService(int selector, String inputPath, String outputPath) {
        this(inputPath);
        if (selector == 1)
            objectToCSV = new ObjectToCSV(outputPath, size);
        if (selector == 2)
            objectToXML = new ObjectToXML(outputPath);
    }

public void chooseConverter() {
        if (objectToCSV != null)
            objectToCSV.printRecord(sentenceObject);
        if (objectToXML != null)
            objectToXML.marshal(sentenceObject);
    }
}

В классе есть 3 приватных поля.Существует также конструктор, который создает экземпляр данного класса.Затем в методе ChooseConverter () выполняется соответствующее действие в соответствии с созданным объектом.

Не могли бы вы дать мне несколько советов, как проверить метод ChooseConverter, поскольку нет возвращаемого значения и параметра (я знаю Junit5 и немного мокито).Я не ищу какого-либо решения, просто несколько слов о том, как подойти к моей проблеме.

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Код в его текущей форме не подходит для юнит-тестов. В крайнем случае, вы можете проверить побочные эффекты ObjectToCSV и ObjectToXML, но давайте попробуем сделать это лучше.

В идеале класс должен предоставлять несколько точек внедрения, чтобы позволить вам вводить новые фиктивные экземпляры ObjectToCSV и ObjectToXML.

  • Существует несколько способов введения DI, например, предоставление фабрик для этих объектов в конструкторе, извлечение фабрики SplitterService, которая внедряет objectToCSV или objectToXML в зависимости от селектора. Эти методы требуют некоторых модификаций клиентского кода.

  • извлечение методов, которые создают экземпляры objectToCSV и objectToXML из конструктора, требует минимального изменения кода и прозрачно для клиентов. В этом случае вы создаете подклассы своего класса и переопределяете методы построителя для возврата имитаций.

  • если никакие модификации существующего кода не допускаются, я могу порекомендовать добавить Powermock и высмеивать конструкторы. Примечание: у вас должен быть запущен сборочный движок junit4, так как Powermock еще не был портирован на jUnit5. https://dzone.com/articles/using-powermock-mock

0 голосов
/ 13 мая 2019

вы смотрите на несколько вещей здесь ... сначала проверьте, что objectToCSV::printRecord (objectToCSV будет Mockito mockito) вызывается при условии objectToCSV != nullobjectToXML:: marshal вызывается при objectToXML != null).А также вы, скорее всего, ищете ArgumentCaptor, чтобы проверить, что objectToCSV::printRecord и objectToXML.marshal - это на самом деле , вызываемые с sentenceObject, который вы установили.

...