2015-03-15 3 views
2

Я пытаюсь издеваться над экземпляром Sql в Groovy следующим образом, я использую платформу spock для тестирования. Однако тест терпит неудачу, пожалуйста, смотрите ниже:Groovy/Mocking Sql

class SQLStatsStorageManagerTest extends Specification { 
    def mockSql 

    def setup() { 

     mockSql = GroovyMock(Sql, global: true) 
    } 

    void "SQLStatsStorageManager instantiation succeed"() { 
     def c 

     when: "SQLStatsStorageManager is instantiated" 
      c = new SQLStatsStorageManager("test", [hostname: "localhost", port: 666, database: "db", login: "root", password: "pass"]) 

     then: "there is no error and name is set" 
      1 * mockSql.newInstance('jdbc:mysql://localhost:666/db', 'root', 'pass', 'com.mysql.jdbc.Driver') 
      assert c.getName() == "test" 
    } 
} 

тест не пройден со следующей ошибкой:

Too few invocations for: 

1 * mockSql.newInstance('jdbc:mysql://localhost:666/db', 'root', 'pass', 'com.mysql.jdbc.Driver') (0 invocations) 

Unmatched invocations (ordered by similarity): 

1 * mockSql.newInstance(jdbc:mysql://localhost:666/db, 'root', 'pass', 'com.mysql.jdbc.Driver') 

Любая идея?

Спасибо.

+2

Кажется, что в непревзойденном вызове 'jdbc: mysql: // localhost: 666/db' не является' String', 'Url' может быть? Я предполагаю, что это та часть, которая не соответствует (отсутствует один апостроф). – Opal

+0

Если вы нашли мой ответ полезным, пожалуйста, примите его и открепите. – Opal

ответ

0

Обратите внимание на то, что единственным аргументом, который не соответствует, является ссылка db.

Вы пытаетесь проверить его как экземпляр String:

'jdbc:mysql://localhost:666/db' 

но несравненного вызов он:

jdbc:mysql://localhost:666/db 

так вот вопрос, что это на самом деле? Проверьте типы, и проблема будет решена.