【问题标题】:How to unit test a method that uses javafx file chooser如何对使用 javafx 文件选择器的方法进行单元测试
【发布时间】:2019-12-25 18:20:20
【问题描述】:

我想为我的保存和加载方法编写一个单元测试,但这些方法使用文件选择器,我不知道如何模拟单元测试中使用的方法。

我的加载和保存方法如下

显然我需要添加更多细节,但我已经简明扼要地总结了我的情况。

public static String load() throws IOException {
        FileChooser fc = new FileChooser();

        // Define extension filters
        FileChooser.ExtensionFilter txtFilter = new FileChooser.ExtensionFilter("Text Files (*.txt)", "*.txt");
        FileChooser.ExtensionFilter odtFilter = new FileChooser.ExtensionFilter("ODT Files (*.odt)", "*.odt");
        fc.getExtensionFilters().addAll(txtFilter, odtFilter);

        File file = fc.showOpenDialog(null);

        // Chose an appropriate method to load the file contents
        if (file != null) {
            FileChooser.ExtensionFilter selectedFilter = fc.getSelectedExtensionFilter();
            if (selectedFilter == txtFilter) {
                return readTxt(file);
            } else if (selectedFilter == odtFilter) {
                return readOdt(file);
            } else {
                return null;
            }
        }

        return null;
    }

// Displays a save file dialog
// Does not return any value
public static void save(String text) throws IOException {
        FileChooser fc = new FileChooser();

        // Define extension filters
        FileChooser.ExtensionFilter txtFilter = new FileChooser.ExtensionFilter("Text Files (*.txt)", "*.txt");
        FileChooser.ExtensionFilter pdfFilter = new FileChooser.ExtensionFilter("PDF Files (*.pdf)", "*.pdf");
        fc.getExtensionFilters().addAll(txtFilter, pdfFilter);

        File file = fc.showSaveDialog(null);

        if (file != null) {
            FileChooser.ExtensionFilter selectedFilter = fc.getSelectedExtensionFilter();

            if (selectedFilter == txtFilter) {
                BufferedWriter writer = new BufferedWriter(new FileWriter(file));
                writer.write(text);
                writer.close();
            } else if (selectedFilter == pdfFilter) {
                savePdf(text, file);
            }
        }   
    }

【问题讨论】:

    标签: java unit-testing javafx filechooser


    【解决方案1】:

    您确定要对此方法进行单元测试吗?这里没有逻辑。但是,如果您处于绝对必须这样做的可怕情况,您将需要创建一个工厂来创建 FileChooser 对象,然后将该工厂的一个实例传递给此方法,然后在您的单元测试中创建一个 FileChooser 类的存根版本(扩展 FileChooser),它将覆盖 FileChooser 的方法,这些方法在您的方法中使用空存根调用。您还可以使用 Mockito 之类的模拟库来减少您需要编写的代码量。

    【讨论】:

    • 只是一个兴趣点:JavaFX 的FileChooserfinal
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多