On 17 July 2015 at 19:23, Sean LeBlanc <sean.lebl...@icd-tech.com> wrote: > I'm trying to figure out the recommended way to write unit tests for classes > that have methods implemented as traits that need to be overwritten with > metaclass programming.
If what you needed is just overriding trait's methods, you could do it with another trait, without resorting to metaclass fiddling: trait T { def speak() { println "trait version" } } class C implements T {} trait T2 { def speak() { println "another trait" } } def c = new C().withTraits T2 c.speak() // prints "another trait" Cheers, Dinko > > > What I've noticed is that using an instance of the class doesn't seem to > work, nor does using the class itself. (Commented out below) > > It seems that setting is on the trait itself does work, however, this must > be done before the first time the implementing class is created, or else > setting the metaClass to null on the implementing class is required (also > commented out below)? > > > Is there a better way to do this? > > > trait T { > def speak() { > println "trait version" > } > } > > class C implements T { > } > > def c = new C() > //c.metaClass.speak = { -> println "meta" } > //C.metaClass.speak = { -> println "meta" } > > c.speak() > //C.metaClass = null > > T.metaClass.speak = { println "meta class version" } > def c2 = new C() > c2.speak()