我们可以在Spock框架的where块中将数据存储在全局变量中吗?

问题描述 投票:0回答:1

我正在尝试将数据存储在 where 块中。有参数(SUBSCRIBER_DETAILS)并尝试填充数据,这将是我稍后将用于其他测试的全局变量。声明了静态变量。是否可以在 WHERE 块中填充数据在什么时候分配? APIV2 是我想在 SUBSCRIBER_DETAILS 中填充数据的调用 我还尝试将 SUBSCRIBER_DETAILS 声明为静态并在 @Shared 部分 这被声明为静态的 静态字符串 APIV2 静态字符串 Obo 静态字符串阿伦达尔 静态字符串备用银行 静态字符串安得布 在当块是:

SUBSCRIBER_DETAILS = APIV2

在 WHERE 块中:

        SUBSCRIBER_ID         | SUBSCRIBER_DETAILS          
        subscriberIdObos      | Obos                 
        subscriberIdArendal   | Arendal              
        subscriberIdSparebank | Sparebank            
        subscriberIdAndebu    | Andebu  

我试图将 SUBSCRIBER_DETAILS 声明为静态和@Shared,但它是一样的

groovy spock
1个回答
0
投票

这是我的建议。不要这样做。您正在创建测试之间的依赖关系,这将使您的测试变得脆弱且难以使用。一方面,这意味着如果没有测试 A 运行,测试 B 就无法工作,这也意味着顺序很重要,因为测试 A 必须在测试 B 之前运行才能设置“全局变量”。你不会有测试隔离,所以尝试运行测试 B 的人不会理解测试之间的关系,你将永远在开发人员工作时解释如何运行测试。

更好的是,您可以创建

setup()
cleanup()
方法或
setupSpec()
cleanupSpec()
方法。
setup()/cleanup()
将在每个测试方法之前,而
setupSpec()/cleanupSpec()
将在规范运行之前和之后运行(即所有测试方法)。

所以这样做并将它们放在基类中可以让您共享这些设置方法,以便在共享代码的同时将测试彼此完全分开。

class AbstractSubscriberDetailsSetup {
    void setupSpec() {
    }

    void cleanupSpec() {
    }
}

class SomeSubscriberDetailsSpec extends SubscriberDetailSetup {

    def testSubscriberDetails() {
    }
}

如果你想将状态保存到

SubscribeDetailSetup
中的实例变量中,这非常好,因为它不是全局的。如果另一个规范将 SubscriberDetailSetup 子类化,它们将与该状态隔离(因为它不是全局的!),并且一切都将独立工作但共享该设置代码。不是数据。

© www.soinside.com 2019 - 2024. All rights reserved.