2

誰かが私が最近戦ってきたこの問題を打破するのを手伝ってくれたら、とても感謝しています. double と Calendar を取り、Calendar の値によって決まる整数を返すメソッドをモックしようとしています。モック定義は次のとおりです。

new NonStrictExpectations()
    {
        // this is my class to be mocked
        Calculator growthCalc;
        {
            GregorianCalendar month = new GregorianCalendar(2010, 0, 1);

            for (int i = 0; i < 3; i++)
            {
                // mock the "applyInflation" method
                growthCalc.applyInflation(anyDouble, month);
                result = i;

                month = (GregorianCalendar) month.clone();  //AAA
                month.add(Calendar.MONTH, 1);
            }

            growthCalc.toString();
            result = "Mocked Calculator";
        }
    };

モックはセットアップされています (toString() を呼び出すと正しいテキストが返されます) が、applyInflation メソッドは上記のループの最後の反復以外のすべてに対してゼロを返します (つまり、月 new GregorianCalendar(2010) を渡すと 2 を返します)。 ,2,1)。

私は、AAA とマークされた行は、私が期待する効果を発揮していないと結論付けました。モックの期待が設定した「月」の内容に影響を与えることなく変更できる「月」の新しいコピーを指すようにポインターを変更しているようには見えません。それか、JMockit が思ったようにモックを記録していないかのどちらかです。

助けてください!どこが間違っているのか教えてください。私の Java の理解に根本的な欠陥があるか、JMockit の実装が「あるべき」方法で動作しないため (私によると :))、ここで何が起こっているのかを知りたいと思います。または、私は、開始の 2 つの夜が発見されていない本当の男子生徒のエラーを犯しました.

ありがとうございました。

4

1 に答える 1

2

あなたのテストは完全に正しいです。私がすぐに修正しているJMockitのバグが原因で失敗するだけです。ご迷惑おかけして申し訳ありません!

于 2011-08-10T23:02:16.557 に答える