Jfreecharts的单元测试

时间:2014-06-13 12:45:01

标签: unit-testing jfreechart mockito

我正在使用JFreechart API构建一个简单的线图..任何人都可以让我知道如何使用mockito进行单元测试。我仍然是一个新的单元测试框架。真的不知道它是如何工作的

public LineChart(String applicationTitle, String chartTitle) {

    super(applicationTitle);
    // Create the dataset
    CategoryDataset dataset = new DataSet().createDataLineSet();        
    JFreeChart chart = createChart(dataset, chartTitle);
    ChartPanel chartPanel = new ChartPanel(chart);
    chartPanel.setPreferredSize(new Dimension(CHART_WIDTH, 
            CHART_HEIGHT));
    setContentPane(chartPanel);

}

/**
 * Creates a sample chart
 * 
 * @param dataset
 *            ,the chartTitle
 * 
 * @return The chart.
 */
public JFreeChart createChart(CategoryDataset dataset, String chartTitle) {
    // TODO Auto-generated method stub

    // create the chart
    JFreeChart chart = ChartFactory.createLineChart(chartTitle, // chart
                                                            // title
            categoryAxisLabel, // category axis label
            valueAxisLabel, // value axis label
            dataset, // data
            PlotOrientation.VERTICAL, // chart orientation
            true, // include legend?
            true, // include tooltips?
            false // URLs?
            );
    return chart;

}

1 个答案:

答案 0 :(得分:1)

您构建它的方式,这是一个特别难以进行单元测试的类,而且我不确定单元测试会提供多少价值。这个代码是用于学校或工作项目的单元测试所有代码"指令?

首先,根据您的标签进行说明:Mockito不是单元测试框架。

至少有三件事情使​​你的课难以使用模拟和JUnit进行测试:

  • 您正在测试的系统直接调用构造函数。这使您很少有机会用更简单的实现或模拟代替测试。
  • 您与(JFreeChart API)交互的协作者是为GUI设计的。以无头,可重复的方式测试面向GUI的类可能很困难,这是单元测试的两个典型方面。
  • 协作者是第三方软件,嘲笑可能很危险。 Mocking依赖于某些实现细节(例如方法是public还是final),这些细节对于不直接受您控制的代码会很危险。

还要记住,测试实现是一种反模式 - 单元测试旨在检查您的代码是否产生了正确的结果。看看你发布的代码,我不确定我会在那里测试什么。

另一方面,如果您有一个单独的项目部分加载和处理数字数据以提供给您的图表,那么生成一个从示例文件中获取数据的JUnit测试将非常简单和有用,通过您编写的加载器/处理器运行它,并确保它生成您已经制定并手动确认的正确数字。即使您的加载器/处理器的实现发生了变化,该测试的持续通过也可以保证您的代码仍能正常工作。