Я новичок во всем чертах в Groovy, поэтому заранее извиняюсь.Grails Unit Test: Mocking Objects Реализуя черты
Учитывая, что у меня есть эта черта:
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 хотя , модульный тест работает нормально.
Я не уверен, что я делаю неправильно с насмешкой. Это то, что абстрактные методы - единственные методы, переопределяемые в чертах? Или это насмешливо, я делаю неправильно?