这是一个例子:
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' } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。