Groovy   发布时间:2022-04-12  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何模拟Groovy中的Traits提供的方法/函数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是一个例子:

Trait Sender {
    def send(String msg){
        // do something
    }
}

class service implements Sender {

    def mymethod1(){
        send('Foo')
        mymethod2()
    }

    def mymethod2(){

    }
}

我正在尝试测试service类.但是,我想存根/模拟对特征(发送)提供的方法调用

我已经尝试了几种不同的方法来存根/模拟方法发送,但没有成功:

// 1
service.Metaclass.send = { String s -> // do nothing }

// 2
def service = new Myservice()
service.MetaClass.send = { String s -> // do nothing }

// 3
stubFor servicestub = new stubFor(service.class)
servicestub.demand.send { String s -> // do nothing }

// 
Trait mockedSender {
  def send(String msg) { // do nothing }  
}
def service = new service() as mockedSender

这些只是我尝试过的一些事情.我甚至尝试使用像mockito这样的模拟框架.不幸的是,似乎没有任何效果.有什么建议???

解决方法

尝试使用Spock框架中的 Spy

像这样:

Trait Sender {
    def send(String msg){
        println msg
    }
}

class service implements Sender {

    def mymethod1(){
        send('Foo')
        mymethod2()
    }

    def mymethod2(){
        println 'real implementation'
    }
}

class UnitTest extends Specification {

    def "TesTing spy on real object"() {
        given:
        service service = Spy(servicE)
        when:
        service.mymethod1()
        then: "service.send('Foo') should be called once and should print 'mocked' and 'real implementation' on console"
        1 * service.send('Foo') >> { println 'mocked' }
    }
}
@H_301_37@

大佬总结

以上是大佬教程为你收集整理的如何模拟Groovy中的Traits提供的方法/函数全部内容,希望文章能够帮你解决如何模拟Groovy中的Traits提供的方法/函数所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。