代码之家  ›  专栏  ›  技术社区  ›  Dee

在Spock中模拟超级#方法()

  •  3
  • Dee  · 技术社区  · 7 年前

    Dislaimer:有一个问题看起来很相似,但实际上不同: Mocking a Superclass in Spock

    前任:

    class Bar {
      def method(){
          return 'bar'
      }
    }
    
    
    class Foo extends Bar {
       def method() {    
           super.method() + ' foo'
       }
    }
    

    我想测试一下 Foo 孤立地说,我想嘲笑 Bar

    def "test"() {
        given:
        def foo = GroovySpy(Foo)
    
        when:
        def result = foo.method()
    
        then:
        1 * ((Bar) directive).generate() >> 'mockBar'
        result == 'mockBar foo'
    }
    

    这显然不起作用,但给出了我试图实现的想法。有什么想法吗?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Dmytro Maslenko    7 年前

    Bar.method() :

    class Foo extends Bar {
       def superMethod() {
           super.method()
       }
    
       def method() {    
           superMethod() + ' foo'
       }
    }
    

    您的测试:

    def "test"() {
        given:
        def foo = new Foo() {
            @Override
            def superMethod() {
                'mockBar'
            }
        }
    
        expect:
        foo.method() == 'mockBar foo'
    }
    
        2
  •  2
  •   Dee    7 年前

    我刚刚知道怎么做。

    then:
    1 * foo.method()
    0 * foo._
    

    它给了我确切的方法,在我从 when:

    then:
    1 * foo.super$3$method()
    

    我不确定从哪里来的 $3$ 来自,可能是继承级别之类的,我想如果你尝试一下,你可能会有不同的数字。