【发布时间】:2016-04-21 04:28:04
【问题描述】:
这是一个例子:
trait Sender {
def send(String msg){
// do something
}
}
class Service implements Sender {
def myMethod1(){
send('Foo')
myMethod2()
}
def myMethod2(){
}
}
我正在尝试测试服务类。但是,我想存根/模拟对特征(发送)提供的方法的调用?
我尝试了几种不同的方法来存根/模拟方法发送,但没有成功:
// 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
这些只是我尝试过的一些事情。我什至尝试使用 Mock 框架,例如 Mockito。不幸的是,似乎没有任何效果。有什么建议吗???
【问题讨论】:
-
好的。我想出了一种使用类别的方法。不过看起来不像是 Groovy 方式... @Category(Service) class MockedService{ def send(String msg){ // 什么都不做 } } use(MockedService){ def service = new Service() service.myMethod1() // 调用 MockedService 中的 send 方法 }
-
你能解决这个问题吗?除了类别方法。
标签: java unit-testing groovy mocking