使用元类方法替换后没有方法签名?

时间:2016-07-06 07:24:51

标签: grails integration-testing

我有一个简单的域类

public void run() { 
while (!answerReady) 
  Thread.sleep(100); 
System.out.println("The meaning of life is: " + answer); 
}

我有一个简单的集成测试来理解groovy的元方法。我只是替换了save方法,并期望它在集成测试中失败。然后,我断言没有cat记录保存在数据库中。

package cat

class Cat {

    String name

    static constraints = {
    }
}

我在此行获得错误assertEquals Cat.count(),0

class CatTests extends GroovyTestCase{


    CatController controller = new CatController()


    @Test
    void testSomething() {                          

        Cat.metaClass.save = {

            throw new Exception("Asdasd")
        }

        shouldFail(Exception){

            Cat cat = new Cat(name: "asd")
            cat.save()

        }

        GroovySystem.metaClassRegistry.removeMetaClass(Cat.class)

        assertEquals Cat.count(), 0



    }
}

为什么抱怨Cat不再有计数方法?我感谢任何帮助!谢谢!

1 个答案:

答案 0 :(得分:0)

确定改变这两个语句的顺序解决了这个问题。

assertEquals Cat.count(), 0

GroovySystem.metaClassRegistry.removeMetaClass(Cat.class)

仍然不确定为什么。