2
私は次のようにコントローラがあり、単純なドメインにMissingMethodException:Groovyメタクラスを使用してメソッドを置き換えた後、メソッドエラーのシグネチャがありませんか?
class Cat {
String name
static constraints = {
}
}
を持っている:
class CatController {
def index() { }
def say(){
def cat = new Cat(name: "cc")
cat.save()
render "done"
}
}
をし、次のように私がテスト、統合テストを持っている:
class CatTests extends GroovyTestCase{
CatController controller = new CatController()
@Test
void testSomething() {
Cat.metaClass.save = {
throw new Exception("Asdasd")
}
shouldFail(Exception){
controller.say()
}
GroovySystem.metaClassRegistry.removeMetaClass(Cat.class)
}
@Test
void testSomething2() {
def before_cat_count = Cat.count()
controller.say()
def after_cat_count = Cat.count()
assertEquals after_cat_count - before_cat_count, 1
}
}
私は時に次のエラーを取得しますテストを実行する。それは、このラインtestSomething2()メソッドの
def before_cat_count = Cat.count()
にカウント方法を見つけていない理由
Failure: testSomething2(cat.CatTests)
| groovy.lang.MissingMethodException: No signature of method: cat.Cat.count() is applicable for argument types:() values: []
Possible solutions: count(), ident(), print(java.lang.Object), print(java.io.PrintWriter), getCount(), wait()
at cat.CatTests.testSomething2(CatTests.groovy:37)
| Completed 2 integration tests, 1 failed in 192ms
さて、私の疑問や質問があります。
私はすでにtestSomethingメソッドの終わりにメタクラスを削除しました。だから、なぜcount()メソッドが見つからないのだろうかと思います。私は助けていただきありがとうございます!ありがとう!
私はちょうどremoveMetaClassパラメータのCat.classの代わりにCatを使用しましたが、うまくいきませんでした。 – kofhearts
Groovyでは、静的な.class参照の代わりにクラス名を使用できます。つまり、CatとCat.classは同等です。 – Corrodias