【发布时间】:2018-02-22 22:37:09
【问题描述】:
我有一个具有以下 fn 的类“ComparisonService”-
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)
}
当我运行它时,我得到了
空指针异常 比较.fetchTableData(dataSource,tableInfo).
为什么会这样。
【问题讨论】:
-
可能是因为
def DataSource dataSource表示您的数据源是null。尝试实例化或模拟它 -
我已经尝试过将“def DataSource dataSource”更改为“DataSource dataSource=Mock()”,但仍然会出现空指针异常。
-
您创建
table作为模拟,但您从未将其传递给您的comparison实例。此外,1*table.fetchData(_ as DataSource)至少需要返回一个空映射,否则records.size()也会抛出 NPE。
标签: java unit-testing spock