在 spock 单元测试规范中传递实际参数

ant*_*009 5 java groovy unit-testing spock

org.spockframework:spock-core:0.7-groovy-2.0
Gradle 1.12
Groovy 1.8.6
java
Run Code Online (Sandbox Code Playgroud)

你好,

我正在尝试使用spock我的 java 应用程序来运行单元测试并使用gradle.

但是,由于我是 spock 的新手,我不确定如何传入实际参数以获得正确的输出?

这是我要测试的函数签名,它接受 inputStream、char[] 和 String:

public String makeRequest(InputStream keystoreFilename, char[] keystorePassword, String cnn_url) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

因此,在我的测试规范中,我想将密钥库文件作为 inputStream 传递,其中实际密钥库位于此处 ../resources/keystore.bks,以及密钥库的实际密码和 Web 服务所在的 url。但是,在尝试运行单元测试时出现此错误:

groovy.lang.MissingMethodException: No signature of method: com.sunsystem.HttpSnapClient.SnapClientTest.FileInputStream()
Run Code Online (Sandbox Code Playgroud)

我的规格测试如下,但我认为我的处理方式是错误的。

import spock.lang.Specification;
import java.io.InputStream;
import java.io.FileInputStream;

class SnapClientTest extends Specification {
    def 'Connect to https web service'() {
        setup:
        def snapzClient = new SnapzClient();

        def inputStream = FileInputStream("../resources/keystore.bks")
        def keystorePwd = "password".toCharArray()
        def url = "https://example_webservice.com"

    expect: 'success when all correct parameters are used'
        snapzClient.makeRequest(A, B, C) == RESULT

        where:
        A           | B           | C   | RESULT
        inputStream | keystorePwd | url | 0
    }
}
Run Code Online (Sandbox Code Playgroud)

非常感谢您的任何建议,

Sya*_*m S 4

我认为该where部分仅接受静态或共享字段。否则该值需要是硬编码的文字。因此,当我修改该类以使参数共享时,它对我有用。请尝试这个

import spock.lang.Shared
import spock.lang.Specification

class SnapClientTest extends Specification {

    @Shared def inputStream = new FileInputStream("../resources/keystore.bks")
    @Shared def keystorePwd = "password".toCharArray()
    @Shared def url = "https://example_webservice.com"

    def "Connect to https web service"() {
        setup:
        def snapzClient = new SnapzClient();

        expect: 
        snapzClient.makeRequest(A, B, C) == RESULT

        where:
        A           | B           | C   | RESULT
        inputStream | keystorePwd | url | "0"
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,该方法的返回类型makeRequest()是字符串。因此,如果您需要用双引号(“)将结果括起来