0
我对Groovy中的整个特性有点新鲜,所以我提前致歉。Grails单元测试:嘲讽对象实现特性
考虑到我有这样的特点:
trait SomeTrait {
public abstract AnotherService getAnotherService();
public Item doSomething(Item item){
// Code doing something in item1 and whatever implements this trait
anotherService.doSomethingElse(this, item);
}
}
而这个服务:
class SomeService {
public void doThings(List<SomeTrait> traits, Item item) {
List<Item> newItems = []
traits.each{ SomeTrait trait ->
newItems << trait.doSomething(item)
}
return newItems
}
}
我需要找到一种方式来嘲笑SomeTraits在单元测试,这样我只需要模拟特质的doSomething()方法。
我试着做了该方法的默认压倒一切:
SomeTrait object = new Object() as SomeTrait
object.metaClass.doSomething = {Item item -> return newItem }
这不起作用,它抛出一个异常,说这样的:
NullPointerException: Cannot call method doSomething() on null object
如果我虽然嘲笑getAnotherService方法,单元测试工作正常。
我不知道我在做什么错误的嘲笑。抽象方法是Traits中唯一可覆盖的方法吗?或者是我做错的嘲弄?