【发布时间】:2014-08-26 18:49:46
【问题描述】:
假设我在服务中有以下方法:
private void deleteItems(List<Item> itemsToDelete) {
def sql = new Sql(dataSource)
itemsToDelete?.each { Item item ->
sql.execute("DELETE FROM owner_item WHERE item_id = ${item.id}")
item.delete(flush: true, failOnError: true)
flushDatabaseSession();
}
}
如何在 ItemServiceSpec 中为此方法创建测试?当我尝试它时,我得到一个 DataSource “必须指定一个非空连接” 错误或 sql 上的一个 nullPointerException。
这是我现有的测试。
@TestFor(ItemService)
@Mock([Item])
@Build([Item])
class SubjectServiceSpec extends Specification {
...
def "delete items"() {
given:
Item item1 = Item.build().save(flush: true)
Item item2 = Item.build().save(flush: true)
Item.count() == 2
DataSource mockDataSource = Mock()
service.dataSource = mockDataSource
1 * deleteItems
when:
service.deleteItems([item1, item2])
then:
Item.count() == 0
}
}
【问题讨论】:
标签: unit-testing variables grails mocking spock