java - 如何在 Groovy 中模拟 String.equals?

标签 java groovy spock

出于测试目的,我需要重写“equals”方法:

def any = [equals: { true }] as String
any == 'should be true'
// false

有关问题的更多详细信息:

class EmployeeEndpointSpec extends RestSpecification {

    void "test employee" () {
        when:
            get "/v1/employee", parameters
        then:
            expectedStatus.equals(response.statusCode)
            expectedJson.equals(response.json)
        where:
            parameters  << [
                [:],
                [id: 824633720833, style: "small"]
            ]
            expectedStatus << [
                HttpStatus.BAD_REQUEST,
                HttpStatus.OK
            ]
            expectedJson << [
                [errorCode: "badRequest"],
                [
                    id: 824633720833,
                    name: "Jimmy",
                    email: "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a7cdcecacadee7c1c6ccc2cac6cecb89c4c8ca" rel="noreferrer noopener nofollow">[email protected]</a>",
                    dateCreated:"2015-01-01T01:01:00.000", // this value should be ignored
                    lastUpdated: "2015-01-01T01:01:00.000" // and this
                ]
            ]
    }
}

lastUpdateddateCreated 可能会及时更改,我需要 以某种方式忽略它们。

最佳答案

如果不需要比较提到的字段 - 删除它们:

class EmployeeEndpointSpec extends RestSpecification {

    void "test employee" () {
        when:
            get "/v1/employee", parameters
        then:
            expectedStatus.equals(response.statusCode)
            def json = response.json
            json.remove('dateCreated')
            json.remove('lastUpdated')
            expectedJson.equals(response.json)
        where:
            parameters  << [
                [:],
                [id: 824633720833, style: "small"]
            ]
            expectedStatus << [
                HttpStatus.BAD_REQUEST,
                HttpStatus.OK
            ]
            expectedJson << [
                [errorCode: "badRequest"],
                [
                    id: 824633720833,
                    name: "Jimmy",
                    email: "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="43292a2e2e3a03252228262e222a2f6d202c2e" rel="noreferrer noopener nofollow">[email protected]</a>",
                    dateCreated:"2015-01-01T01:01:00.000",
                    lastUpdated: "2015-01-01T01:01:00.000"
                ]
            ]
    }
}

我还将测试负面和正面场景分开。

您还可以与测试键值分开测试keySet(),而不是比较整个 map 。这就是我这样做的方式:

then:
def json = response.json
json.id == 824633720833
json.name == "Jimmy"
json.email == "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="32585b5f5f4b72545359575f535b5e1c515d5f" rel="noreferrer noopener nofollow">[email protected]</a>"
json.dateCreated.matches('<PATTERN>')
json.lastUpdated.matches('<PATTERN>')

如果您不喜欢最后两行,可以将其替换为:

json.keySet().contains('lastUpdated', 'dateCreated')

关于java - 如何在 Groovy 中模拟 String.equals?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28042074/

相关文章:

curl - Jenkins Pipeline - 使用 sh 和curl 获取 java.io.NotSerializedException

gradle - 如何在 gradle 中为基于 ext 的属性分配默认值

java - Gradle 无法在 java 和 groovy 中运行测试

grails - 如何编写共享浏览器 session 的Spock测试

java - jtextarea 数组的声明问题

java - 允许在 Ubuntu 17.10 上对 Spring Boot Jar 进行低级端口访问

android - 循环内的命令行

java - 如何模拟 Wicket 组件

java - 如何使用 Google 脚本和 Google 表格在指定日期前 3 天发送电子邮件?

java - 在泛型方法java中传递类类型