簡體   English   中英

在 Groovy 中使用 MockFor 進行單元測試的模擬 SQL

[英]Mocking SQL for unit testing using MockFor in Groovy

下面的代碼片段是我的 Groovy 類的單元測試用例代碼。

在 Eclipse Luna 中使用 maven build 運行此測試用例時出現以下錯誤:

錯誤:[錯誤] com.double.example.application.appMockTest#testUserList MissingMethodException

你們中的任何人都可以對此有所了解嗎? 如何解決這個問題?

注意:在網上看到的討論很少,但沒有任何結果。

public void testUserList() { 
    setup() 
    def userList = [['name':'12345678', 'actual_name':'Paul allan']] 
    List<User> tempList = new ArrayList<User>() 

    mocksql.demand.eachrow { 
        def query, closure -> userList.each(closure) 
    } 

    mocksql.use { 
        apply1 = new apply1(
            <connection string goes here>, 
            <username>, <password>, 
            <schemaname>, 
            "oracle.jdbc.driver.OracleDriver") 
        tempList = apply1.getapply1UserList() 
    } 
} 
} 

聽起來您的變量 mocksql 應該是 MockFor(Sql),而不是實際的 Sql 對象。

import groovy.sql.Sql
import groovy.mock.interceptor.MockFor

MockFor mocksql = new MockFor(Sql)
mocksql.use { 
    // ...
}

所以這應該很容易解決。

還有一件事:要非常小心你的嘲笑。 您正在嘲笑eachrow,但Sql 上沒有這樣的方法,因為它實際上被稱為eachRow。 如果您在測試和實際代碼中犯同樣的錯誤,錯誤將被隱藏。

在這里,我兩次都以相同的方式錯誤輸入了“行”,並且我的測試通過了:

import groovy.mock.interceptor.MockFor
import groovy.sql.Sql
import groovy.sql.GroovyRowResult

new MockFor(Sql).with {
    it.demand.withInstance {a,b,c,d, closure -> closure.call( new Sql() ) }
    it.demand.rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrows { query ->
        assert query == 'SELECT * FROM Users'
        return [['name':'12345678', 'actual_name':'Paul allan']]
            .collect { new GroovyRowResult (it) } 
    }
    it.use { assert getUserList() == ['12345678'] }
    it.expect.verify()
}

public String[] getUserList () {
    Sql.withInstance('url', 'user', 'pass', 'driver') { sql ->
        sql.rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrows ('SELECT * FROM Users') 
            .inject (new ArrayList<String>()) { usernames , result -> usernames << result.name }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM