0
私はgroovyでテストを書いています。共同作業者の共同作業者(CUT) )。groovy:共同作業者のゲッターを模擬してスタブを返す方法
project.loggerは、インターフェイスorg.gradle.api.Project.Loggerのインスタンスを返します。ロガーは私が嘲笑する必要があるゲッターです。
Loggerインターフェイスを実装せずにLoggerを作成し、それを返す方法はありますか? 私はテストを模擬することに全く新しいので何かが欠けていると思います。
おかげ 月
のTestCase:
import org.gradle.api.Project
class MyClassUnderTestTestCase{
@Test
void testDoSomething(){
StubFor projectStub = new StubFor(Project)
projectStub.demand.getLogger { } // create a Logger stub here?
projectStub.use {
def project = { } as Project
MyClassUnderTest cut = new MyClassUnderTest(project)
cut.doSomething()
//Further assertions
}
projectStub.expect.verify()
}
}
マイCUT:
import org.gradle.api.Project
class MyClassUnderTest{
private Project project
MyClassUnderTest(Project project){
this.project = project
}
void doSomething(){
project.logger.info "Start doing something..." // project.logger should now return a stubbed instance of Logger
//Do some stuff
}
}
私はstub.useクロージャをネストできるかどうかわかりませんでした。 しかし、私は今にNullPointerを取得しています: 'のjava.lang.NullPointerException:org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:91)でnullオブジェクト \tにメソッドの情報を()を呼び出すことはできません' –
多分{}をProjectとして新しいProject()に変更したら?私はここでいくつかのテストを行いましたが、これはコードと私の唯一の違いです。 – rafaelim
プロジェクトとロガーはインターフェイスなので、新しいプロジェクトをインスタンス化することはできません。 これらのインターフェイスが本当に重いので、これらのインターフェイスのダミー実装を提供するか、実装クラスを検索する必要がないという事実を利用したいと思います(両方のクラスを実装すると1000までの合計を実装します) –