如何使用Mockito测试简单的给定方法



我是使用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个私人字段。还有一个实例化给定类的构造函数。然后在ChoSeconverter((方法中,根据创建对象采取适当的操作。

您能给我一些建议如何测试choseconverter方法,因为没有返回值和参数(我知道junit 5和少量Mockito(。我不是在寻找任何给定的解决方案,只是几个单词如何处理我的问题。

以当前形式的代码不友好。作为最后的手段,您可以测试ObjectTOCSV和ObjectToxMl的副作用,但让我们尝试做得更好。

理想情况下,类应提供一些注入点,以使您注入ObjectToCSV和ObjectToxMl的新模拟实例。

  • 有多种方法可以引入DI,例如在构造函数中为这些对象提供工厂,从而提取splitterService工厂,该工厂根据选择器的不同,该工厂会根据选择器注入ObjectTOCSV或ObjectToxMl。这些方法需要对客户端代码进行一些修改。

  • 提取从构造函数创建ObjectTOCSV和ObjectToxML实例的方法需要最小的代码更改,并且对客户端透明。在这种情况下,您将班级和覆盖构建器方法归还模拟。

  • 如果不允许对现有代码进行修改,我建议您在PowerMock中拉出并嘲笑构造函数。注意:您必须运行Junit4 Vintage Engine,因为PowerMock尚未移植到Junit5。https://dzone.com/articles/using-powermock-mock

您在这里查看几件事...首先检查objectToCSV::printRecord(objectToCSV将是oiveito Mock(在条件objectToCSV != null下被调用(并且objectToXML:: marshalobjectToXML != null下被调用(。而且,您也很可能正在寻找ArgumentCaptor,也就是说,测试objectToCSV::printRecordobjectToXML.marshal实际上是用您设置的sentenceObject来调用的。

最新更新