当前位置: 首页 > 知识库问答 >
问题:

使用Spock动态更改where子句中的数据

郎翔
2023-03-14
class TestSuite extends Specification {
@Shared
def elements

def setupSpec{
    elements =  ['a.txt':1,'b.txt':2]
}

@Unroll
def 'test for #first and #second'() {
expect:
  true

where:
  [first, second] << [elements.keySet(), elements[first].findResults { key, value->
        key.substring(key.indexOf('.') + 1)
    }].combinations()
  }
}

编辑的

共有1个答案

黄逸清
2023-03-14

我不得不说你的代码没有多大意义。我犹豫不决,不想直接否决你的问题,而不是回答。这个问题有太多的错误。只是表明你在提出问题时缺乏努力。

第一个危险信号是您甚至没有尝试编译这段代码。您有一个带有字符串键和整数值的映射:

  • 您的地图未编译。在Groovy中键/值对用逗号分隔。
  • 调用此映射的方法是(map#key()?)不在API中。

然后,有两种可能,要么是您想象中的key()方法返回键,这没有任何意义,因为第一个已经是键,要么是key()返回值,这是非常糟糕的命名。但是错误的命名并不是全部,因为这样您就可以在一个整数上调用toUpperCase()....这真是一团糟!

不过,我将向你们展示如何将where变量的值建立在另一个where变量的值基础上,因为这是问题的核心部分,有

import spock.lang.*

class MyFirstSpec extends Specification {
    //elements needs to be Shared to be used in a where block
    @Shared
    def elements = ['a':1,'b':2]

    @Unroll
    def 'test for #first and #second and #third'() {
        expect:
        true

        where:
        first << elements.keySet()

        and:
        second = elements[first]
        third  = first.toUpperCase()
    }
}

导致

- test for a and 1  and A
- test for b and 2  and B
 类似资料:
  • 问题内容: 我试图建立一个查询,其中基于用户选择从客户端发送一些字段。我计划根据用户的选择创建一个动态查询。尽管我可以简单地用一些Java代码来完成它,并且让hibernate为我激发该查询并返回结果。 我的问题是,我可以使用内置hibernate机制来做同样的事情。例如我会得到一张地图说 唯一的区别是地图可以包含的值的数量,并基于此我想创建一个查询 提前致谢 问题答案: 通过使用条件,这应该不成

  • 我将Gatling与JDBC feeder一起使用,并希望根据之前请求的响应动态地向JDBC feeder的where子句添加一个参数。这里是我的例子,我试图做一个帖子,创建一个用户,然后让提要使用create user请求返回的userId获取用户生成的UUID,然后用UUID发布一些数据。 我已经核实了以下内容: 1)用户数据确实在表单帖子上正确插入数据库2)用户ID从表单帖子返回3)用户ID

  • 根据给定的表数据,第三行中的非空字段是“field1”和“field3”。因此WHERE子句将是: 我如何编写一个具有动态WHERE子句的通用SQL来满足这个需求?

  • 由于在抽象中解释我要做什么有点困难,所以我克隆了spring-boot-sample-data-jpa项目,并对其进行了修改,以展示我正在尝试做什么的示例。 我有这些模型类,您将注意到和扩展了实体。 我正在尝试编写一个查询,返回包含或的所有城市,其主要运动是给定类型的。 我编写了一个JPQL版本的查询,它有点难看(我不喜欢部分来表示它是一家水疗酒店),但似乎返回了我想要的。 但该查询的QueryD

  • 问题 你希望创建一个字典来构造动态的where子句并且希望能够在查询语句中使用。 解决 >>> import web >>> db = web.database(dbn='postgres', db='mydb', user='postgres') >>> where_dict = {'col1': 1, col2: 'sometext'} >>> db.delete('mytable', whe

  • Spring数据中是否有一种方法可以动态地形成where子句? 我想要做的是有一个方法(类似于findBy/get方法),它运行WHERE和and并使用所提到的属性,这些属性不是空的。 例如, 我们的方法如下所示 谢了。