我有一个课程如下 -
@Repository
public class TableImpl implements Table{
@Autowired
DataSource dataSource;
@Autowired
DataSource dataSource2;
private static List<Object> tableInfo;
public List<Object> getTableInfo() {
return tableInfo;
}
public void setTableInfo(List<Object> tableInfo) {
this.tableInfo = tableInfo;
}
public List<String> fetchColumns(BasicDataSource dataSource){
JdbcTemplate jdbctemplate = new JdbcTemplate(dataSource);
List<Map<String, Object>> columnMap = jdbctemplate.queryForList("show columns from " + tableInfo.get(0).toString());
List<String> columns = new ArrayList<String>();
for (Map<String, Object> column: columnMap)
{
columns.add(column.get("FIELD").toString());
}
return columns;
}}
我想在spock中为方法fetchColumns写一个测试。
这是我尝试的但这不起作用 -
class TableImplSpec extends spock.lang.Specification{
JdbcTemplate jdbcTemplate=Mock()
DataSource dataSource1=Mock()
def List<Object> tableInfo=[1]
def BasicDataSource dataSourceValue
def BasicDataSource dataSource
def TableImpl obj=new TableImpl(
dataSource: dataSource1
)
def Table obj1=new TableImpl(
dataSource: dataSource1,tableInfo: tableInfo
)
List<Map<String, Object>> recordsList
def "fetch columns"()
{
given:
TableImpl TableImplMock = Mock()
def Table obj2=new TableImpl(
dataSource: dataSource1,tableInfo: tableInfo
)
tableInfo.add(0,"promptpaySched")
tableInfo.add(1,"promptpaySchedID")
tableInfo.add(2,"name,lastname")
tableInfo.add(3,1)
jdbcTemplate.queryForList(_ as String)>> null
when:
obj2.fetchColumns(dataSource)
then:
1*jdbcTemplate.queryForList(_ as String)
}}
我得到的错误是--- IllegalArgumentException:属性'dataSource'是必需的。我完全不知道我要对我的测试班做出哪些改变。
答案 0 :(得分:0)
如果您正在为与数据库交互的代码编写测试(即从中读取数据或将数据存储到其中),您可能需要调整测试以传递实际的dataSource(而不是模拟的数据)。 否则尝试在Repository级别进行模拟并使用它来返回预期的对象。