Passing actual parameters in a spock unit test specification
groovy, java, spock, unit-testing
Solution
I think the `where` part accepts only static or shared fields. Or else the value need to be a hard coded literal. So when I modified the class to make the parameters shared it worked for me. Please try this
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"
}
}
Please note that the return type of `makeRequest()` method is string. So if you need to enclose the RESULT with double quotes(")
Problem
``` org.spockframework:spock-core:0.7-groovy-2.0 Gradle 1.12 Groovy 1.8.6 java ``` Hello, I am trying to use `spock` with my java application to run unit tests and building with `gradle`. However, since I am new to spock, I am not sure how I can pass in the actual parameters to get a correct output? This is the function signature I want to test, which takes in an inputStream, char[], and a String: ``` public String makeRequest(InputStream keystoreFilename, char[] keystorePassword, String cnn_url) { ... } ``` So in my test specification, I want to pass the keystore file as an inputStream where the actual keystore is located here ../resources/keystore.bks, and the actual password for the keystore and the url to where the web service is. However, I get this error when trying to run the unit test: ``` groovy.lang.MissingMethodException: No signature of method: com.sunsystem.HttpSnapClient.SnapClientTest.FileInputStream() ``` My specification test is below, but I think I am going about this the wrong way. ``` 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 } } ``` Many thanks for any suggestions,