我有一個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