spock中单元测试中的空指针异常

时间:2017-09-14 04:46:39

标签: java unit-testing spock

我有一个“ComparisonService”课,下面是fn -

public HashMap <String, Map<String, Object>> fetchTableData(DataSource dataSource, List<Object> tableInfo){
    table.setTableInfo(tableInfo);
    HashMap<String, Map<String, Object>> records = table.fetchData(dataSource);
    System.out.println(records.size());
    return records;
}

此表是其他类表的对象

我正在为此方法编写spock测试 -

class ComparisonSpec extends spock.lang.Specification{
Table table=Mock()
def DataSource dataSource
def List<Object> tableInfo=[1]
def setup()
{
    //def DataSource dataSource 
}
def "first function"()
{
    given:
    def ComparisonService comparison= new ComparisonService()
    when:
    comparison.fetchTableData(dataSource,tableInfo)
    then:
    1*table.setTableInfo(_ as String)>>true
    1*table.fetchData(_ as DataSource)
}

当我运行它时,我得到了

  

空指针异常   comparison.fetchTableData(数据源,tableInfo)。

为什么会这样。

2 个答案:

答案 0 :(得分:0)

好的,我可以看到几点:

首先 def DataSource dataSource 您正在尝试静态和动态地键入变量。这应该是:

  • 静态:DataSource dataSource
  • 动态:def dataSource

<强>第二 您声明变量dataSource但从不初始化它。在您需要的测试或设置中: dataSource = <what ever data source is>

答案 1 :(得分:0)

原因可能是records的变量为null,您应该模拟记录。