2017-09-18 2 views
0

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.

+0

Bitte posten Sie den vollständigen Stacktrace –

Antwort

0

Wenn Sie Tests für Code schreiben, der mit der Datenbank interagiert (d. H. Daten liest oder speichert Daten), müssen Sie möglicherweise Ihre Tests anpassen, um die tatsächliche dataSource (nicht gespottet) zu übergeben. Andernfalls versuchen Sie, auf Repository-Ebene zu verhöhnen und verwenden Sie es, um erwartete Objekte zurückzugeben.

Verwandte Themen