Я пытался воспроизвести вашу проблему с помощью Спока 1.3 и Groovy 2.5.8, но не смог. У меня была другая проблема со Споком, см. здесь . Вы должны использовать другие версии Spock и / или Groovy.
В любом случае, один из обходных путей для ошибки Spock, на которую я только что ссылался, - не вызывать метод с нулевым параметром из then:
или * 1006. * блокировать, но с when:
и выполнить сравнение позже в блоке then:
. См. Также мой пример кода там.
В дополнение к этому, вам нужно разделить свой метод пространственных объектов на два метода, по одному для каждого типа null
объекта, который вы хотите протестировать.
Тестируемый класс Java:
package de.scrum_master.stackoverflow.q58279620;
public class ClassUnderTest {
public static Object someMethod(String n) {
return n == null ? "nothing" : "something";
}
public static Object someMethod(Integer n) {
return n == null ? -999 : 11;
}
}
Обходной путь теста Спока:
package de.scrum_master.stackoverflow.q58279620
import spock.lang.Specification
import spock.lang.Unroll
class PassingNullToOverloadedMethodTest extends Specification {
@Unroll
def "someMethod('#input') returns #expected"() {
when:
def result = ClassUnderTest.someMethod(input as String)
then:
result == expected
where:
input | expected
"foo" | "something"
"" | "something"
null | "nothing"
}
@Unroll
def "someMethod(#input) returns #expected"() {
when:
def result = ClassUnderTest.someMethod(input as Integer)
then:
result == expected
where:
input | expected
0 | 11
123 | 11
null | -999
}
}