gpt4 book ai didi

testing - 我如何重用测试的某些部分?

转载 作者:行者123 更新时间:2023-11-28 19:59:19 25 4
gpt4 key购买 nike

我需要实现以下逻辑:

  1. 做某事
  2. 检查逻辑
  3. 做点别的
  4. 类似的校验逻辑

我使用 when/then block 进行简单测试。但我真的不知道如何实现更复杂的(如上所述)+我想尽可能多地重用代码。但是有了 block ,实现起来就更复杂了

最佳答案

我采用了几种方法来重用 Spock 中的代码。

特征级别在您的 setup: block 中创建一个闭包。您可以将其视为仅适用于此功能的方法。

def "test"() {
setup:
def containsCat = {String it -> it.contains('cat')}
expect:
!containsCat('I love my dog')
containsCat('I love my cat')
}

def "test that cannot reference containsCat(String)"() {
// Test stuff
}

规范级别虽然可以使用 @Shared 闭包,但我更喜欢使用私有(private)辅助方法,除非辅助逻辑只有一两行。

class tester extends Specification {
@Shared
def containsDog = {String it -> it.contains('dog')}
private containsCat(String inputString) {
inputString.contains('cat')
}

def "test"(String myPet) {
expect: containsCat(myPet)
where: myPet = 'I love my cat'
}

def "test2"() {
expect: containsDog(mySistersPet)
where: mySistersPet = 'I love my dog'
}

包级别
我有一组类都可以从共享一个微型测试框架中获益。我的偏好是使用特征。他们可以持有除功能测试本身之外的任何代码。如果特征将引用来自测试本身的数据,请确保创建一个抽象方法,以确保特征引用数据。

trait petTester {
private containsDog(String inputString) {
inputString.contains('dog')
}
private containsCat(String inputString) {
inputString.contains('cat')
}
}

class myPetTester extends Specification implements petTester {
def "test"(String myPet) {
expect: containsCat(myPet)
where: myPet = 'I love my cat'
}
}

class mySistersPetTester extends Specification implements petTester {
def "test2"() {
expect: containsDog(mySistersPet)
where: mySistersPet = 'I love my dog'
}
}

关于testing - 我如何重用测试的某些部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19910644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com