我有一个Spock规范来测试需要java.util.Date
的方法。Spock - 用不同的系统默认值重复测试
def "special dates are identified correctly"() {
expect:
isSpecialDay(Date.parse('yyyy/MM/dd', date)) == special
where:
date | special
'2010/01/01' | false
'2011/01/01' | true
'2012/01/01' | true
'2013/01/01' | false
'2014/01/01' | true
// and lots more...
}
我想要确保的时区不会使我的方法实现的差异(即2011年1月1日无论是特殊的,如果我在美国东部时间或GMT或无论是)。 有没有一种方法可以在一次运行中重复执行测试方法,并且每次执行时使用不同的默认时区?
我可以添加第三列到TimeZone的“where”块,但是额外的维度会使表格太大而不适合我的喜好。
目前,我为每次测试运行设置一个随机默认值,但我不喜欢这样一个事实,即我的测试不可重复,如果发生故障,有问题的TimeZone不会在断言消息中捕获。
@Shared TimeZone defaultTz = TimeZone.getDefault()
def setupSpec() {
def tzIds = TimeZone.getAvailableIDs()
def randomTzId = tzIds[new Random().nextInt(tzIds.length)]
def randomTz = TimeZone.getTimeZone(randomTzId)
println "Using TimeZone $randomTz for test spec"
TimeZone.setDefault(TimeZone.getTimeZone(randomTzId));
}
def cleanupSpec() {
TimeZone.setDefault(defaultTz)
}
parse - http://docs.groovy-lang.org/latest/html/groovy-jdk/java/util/Date.html - 被覆盖并接受'TimeZone'参数。我会在数据表中添加一个'tz'列,并在那里放置随机时区。这样做有可能吗? – Opal
@Opal - 这是可能的,但如果我想要彻底,每个时区我想检查的表格会增加100行(当前块的实际位置是100行) – bdkosher
您可以随机选择此过程。不要将TŻ添加到表中,而是从例如预定义集合。 – Opal