私の単体テストの1つで、模擬メソッドを実行するのが難しいです。私はICFServiceのgetAllIC()を介して人を作成し、私のコントローラクラスの詳細の内部Grails Unit Testのためのメソッドを模擬してください
void testExample() {
def mockICFService = new MockFor(ICFService)
...
//Mock the methods
controller.metaClass.icfList = { def person ->
println "icfList"
return [new IC(conceptId:'12345')]
}
mockICFService.demand.getAllIC(1..1) { def id, def withHist, def appId ->
println "mocking service"
return new Person()
}
...
def model = controller.detail()
}
:私は、次のテストコードを持っています。この部分は正しく動作します。ただし、後でこの関数では、icfList(コントローラで定義されています)の呼び出しがあります。 printlnを通して、空の配列を返していますが、呼び出しがまだ行われていると判断しました。これは、配列がservletContextのデータに基づいて作成されているためだと思いますが、ユニットテストではそれにアクセスできません(したがって、私はそれを模擬しようとしています)。
コントローラで実際のメソッドを呼び出すのではなく、実際のテストで強制的にcontroller.icfListを使用する方法を知っている人はいますか?
助けてくれてありがとうジョーダン!私はmockForのアドバイスを使って作業を進め、getICF()(主にPROPERコントローラーでオーバーライドしていることを確認しています...)を嘲笑した方法に少し変更を加えました。 –
うれしかった! –