Groovy에서 인수가있는 메소드를 인수없이 호출 할 수 있습니까?

3172 단어 Groovygradlespock
조금 빠져서 메모. 제목대로지만.
Groovy:2.4.6, Gradle:2.12, Spock:1.0에서 시도하고 있습니다.

인수 첨부 메소드가 인수 없이 호출할 수 있다



Sample.groovy
class Sample {

    String say(String message) {
        return "Hello!"
    }
}

위와 같이 하나의 인수를 취하는 메소드가 정의되었습니다.
그것을 아래와 같이 인수 없이 부르는 테스트를 적어본다.

SampleSpec.groovy
class SampleSpec extends Specification {

    def "引数ありのメソッドに引数なしで呼べる"() {
        given:
        def sut = new Sample()

        when:
        def actual = sut.say()

        then:
        actual == "Hello!"
    }
}

Java라면 컴파일 에러가 되는 곳이지만, Groovy라고 통과한다.
게다가 Red가 아니라 Green이 된다.

테스트를 Red로 만들고 싶다면



예를 들어 위의 클래스를 변경하고,

Sample.groovy
class Sample {

    String say(String message) {
        return "Hello! $message"
    }
}

로 보면 아래와 같이 떨어진다.



인수 없이 부른 것은 null가 들어간다.



테스트 결과로부터 봐 알았지만, 인수 없이 부르면 인수의 곳은 null가 들어가는군요.
그건 그렇고, 콘솔에서,
org.spockframework.runtime.SpockComparisonFailure at SampleSpec.groovy:13

라는 느낌의 에러가 된다. 일단 컴파일 오류 취급? 되어 있다.

유사한 사례



들여다 보면 비슷한 문제를 언급하는 블로그를 발견했다.

Groovy gotcha: Passing zero arguments to a method that expects one

코멘트라든지까지 보고 있으면, もしnullがnothingってことなら、引数なし呼び出しと引数にnull渡して呼ぶのは等価だね。 같은 이야기가 나와 있다.

방심하면 눈치채지 못할 것 같았기 때문에, 시그니쳐 변경할 때는 주의합시다.

좋은 웹페이지 즐겨찾기