5

メソッドの 1 つが共同作業者クラスのインスタンスを返すクラスを単体テストしようとしています。引数の値に応じて、新しく作成されたインスタンス、または保存された、以前に作成されたインスタンスを返します。

Expectations でコンストラクター呼び出しをモックし、その結果をコラボレーターのモック化されたインスタンスである値に設定します。しかし、新しいインスタンスを作成するパラメーター値を使用してメソッドをテストすると、モックされたコンストラクター、したがってメソッドは期待値を返しません。

これを次のように単純化しました。

package com.mfluent;
import junit.framework.TestCase;
import mockit.Expectations;
import mockit.Mocked;
import mockit.Tested;
import org.junit.Assert;
import org.junit.Test;

public class ConstructorTest extends TestCase {

    static class Collaborator {
    }

    static class ClassUnderTest {
        Collaborator getCollaborator() {
            return new Collaborator();
        }
    }

    @Tested
    ClassUnderTest classUnderTest;

    @Mocked
    Collaborator collaborator;

    @Test
    public void test() {
        new Expectations() {
            {
                new Collaborator();
                result = ConstructorTest.this.collaborator;
            }
        };

        Collaborator collaborator = this.classUnderTest.getCollaborator();
        Assert.assertTrue("incorrect collaborator returned", collaborator == this.collaborator);
    }
}

このテストが失敗する理由と、それを機能させる方法についてのアイデアは大歓迎です。

前もって感謝します、

Jim Renkel シニア テクニカル スタッフ mFluent, Inc. LLC

4

1 に答える 1

3

次のように、@Mocked注釈をに変更します。@Capturing

@Capturing
Collaborator collaborator;

これにより、テストに合格できます。

私の意見では、これはちょっとしたブードゥーの魔法ですが、もっと読みたい場合は、JMockit チュートリアルのモックされた型の内部インスタンスのキャプチャをご覧ください。

JMockit を使用して、モックされたコンストラクターから実際のインスタンスを返すも参照してください。

于 2013-05-16T16:13:50.873 に答える