Ich habe eine Klasse als folgt-Spock Test für Java-Code von jdbc spöttischen
@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;
}}
ich einen Test für die Methode fetchColumns hier in spock schreiben wollte. Diese
ist, was ich versucht habe, aber das ist nicht working--
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)
}}
der Fehler Ich erhalte ist --- Illegal: Eigenschaft ‚Datasource‘ ist erforderlich. Ich bin völlig verwirrt, was ich an meinem Testkurs ändern muss.
Bitte posten Sie den vollständigen Stacktrace –