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中唯一可覆蓋的方法嗎?或者是我做錯的嘲弄?