class MyServiceSpec extends Specification {
def myService
def sqlService
@Shared tsQuery
@Shared ts
def setupSpec() {
tsQuery = "select column1, column2, column3 from table where column1 = ?"
ts = sqlService.rows(tsQuery, ['someSuch'])
}
def "test a feature"() {
setup:
def ts = sqlService.rows(tsQuery)
def results = myService.getTimesheets(thing1, thing2, thing3)
expect:
//some appropriate expectations based on the data here
where:
timeSheet << ts
thing1 = timeSheet.column1
thing2 = timeSheet.column2
thing3 = timeSheet.column3
}
}
Only @Shared and static fields may be accessed from here
ts = sqlService.rows(tsQuery)
^
问题是,如果我使sqlService@shared
,Grails依赖项注入不起作用,它只创建一个空对象。如果我尝试将其设置为静态(如static def sqlservice
),情况也是如此。
java.lang.NullPointerException: Cannot invoke method rows() on null object
我尝试将一个新的SqlService实例小型化,就像我的setupSpec块中所示:
def setupSpec() {
tsQuery = "select column1, column2, column3 from table where column1 = 'someSuch'"
def sql = new SqlService()
ts = sql.rows(tsQuery)
}
这只是给出了一个错误
有人知道我如何在Spock测试中使用另一个服务类作为数据提供者吗?
所以,这就是我的工作测试类最终的样子:
package edu.missouristate.employee.dts
import spock.lang.*
import static org.junit.Assert.*
import org.junit.*
import groovy.sql.Sql
class MyServiceSpec extends Specification {
def myService
def dataSource
@Shared tsQuery
@Shared ts
def setup() {
tsQuery = '''select column1, column2, column3
from table where column1 = ?
and rownum < 6'''
def sql = new Sql(dataSource)
ts = ts ?: sql.rows(tsQuery, ['someSuch'])
sql.close()
}
def "dummy test"() { //This is just to get the spec initialized.
expect:
1==1
}
def "test a feature"() {
setup:
def results = myService.getTimesheets(timeSheet.thing1, timeSheet.thing2, timeSheet.thing3)
expect:
//some appropriate expectations based on the data here, e.g.
results[0].someProperty == timeSheet.correspondingDatabaseColumn
where:
timeSheet << ts
}
}
简而言之,我放弃了使用自己的sqlService类,而是直接使用Groovy Sql类。
其他注意事项:我在测试方法和迭代中有效地重用了ts对象,因为我只想从数据库中提取一次数据。我还在查询中添加了rownum限制,这样它就只能执行这么多的迭代。
我正在将Grails2中的一系列单元测试升级到Grails3,并在使用Spock数据驱动测试格式驱动测试的域测试中遇到问题。 当我执行测试时,因为测试执行没有填充测试中的错误、字段和val引用。如前所述,这个测试适用于Grails2.5.5,所以我怀疑我缺少了Grails3中需要的一些东西。 Edited:我删除了原来在setup()中的mockForConstraints()调用,使其无效。
问题内容: 您如何在jUnit中编写数据驱动的测试? (我的定义)数据驱动测试是一种从某些外部源(文件,数据库等)读取数据,每行/文件/任何内容执行一个测试,并将结果显示在测试运行程序中的测试,就像您进行了单独的测试- 每次运行的结果将单独显示,而不是汇总显示。 问题答案: 在JUnit4中,您可以使用Parameterized testrunner进行数据驱动的测试。 它的文档记录不是很好,但是
我尝试使用Grails 1.3.7、Geb、Spock和Selenium运行功能测试。下面是我的buildconfig.groovy文件: 测试代码如下所示:
然而我却遇到了错误。我无法确定错误发生的确切位置,但我从结果树中获得了如下错误消息: 对于JSR223采样器 响应消息:javax.script.scriptException:源文件:内联计算:import org.apache.poi.xssf.usermodel.xssfworkbook;导入org.apache.poi.xssf.us。..“:INTEGER.parseint(vars.g
我有以下类要测试
使用Selenium,我编写了下面的代码,从Excel表中读取数据,并在电子邮件中键入密码,进入Facebook的登录页面。错误是使用try/catch时未处理的表达式。我如何解决这个问题?