0

メソッドをモックしようとしていますが、エラーなしでコンパイルされますが、テストを実行すると奇妙なことが起こります。実際、メソッドはモックではありませんか、おそらく私はsmthを理解していません...(

コードは次のとおりです。

public class Robot
{   ....

    public virtual bool range(IObs ob, double range)
    {
        double dist = ob.distanceSq(this);
        if (dist < range)
            return true;
        else
            return false;
    }
}

...

public interface IObs
{
    double distanceSq(Robot r);
}

...

単体テスト:

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        MockRepository mocks = new MockRepository();
        IObs obstacleMock = mocks.CreateMock<IObs>();
        Robot r = new Robot();
        Expect.Call(obstacleMock.distanceSq(r)).IgnoreArguments()
           .Constraints(Is.Anything())
            .Return(5.5);
        Assert.IsTrue(r.range(obstacleMock, 0.5));
    }
}

distanceSq() をモックします。テストをデバッグすると、ob.distanceSq(this) が 0.0 であることがわかります。(1.5 ではない)。

どうしたの?

4

2 に答える 2

0

あなたのコードはあなたが作成したモックを実際には使用しません - as の引数に変更Obstacleし、の新しいインスタンスの代わりに mock を渡すことができるからです:IObjsrangeObstacle

public virtual bool range(IObjs ob, double range)....
class Obstacle : IObjs ...

Assert.IsTrue(r.range(obstacleMock, 0.5));
于 2013-05-29T20:52:44.683 に答える