1

私は非常に単純なことをしようとしています。プロパティに初期値を設定し、コールバックがプロパティ値を変更するメソッドを呼び出し、最後にプロパティを読み取ります。

クラスTest2は、ITest1を使用していくつかのアクションを自動化します。

public interface ITest1
{
    decimal Value { get; set; }
    void Increment();
}

public class Test2
{
    ITest1 test1;
    public Test2(Itest1 test1)
    {
        this.test1 = test1;
    }

    public void Increment()
    {
        this.test1.Increment();
    }
    public Get()
    {
       return this.test1.Value;
    }
}

この動作を実現するために、私はこのテストを設定しました。

[TestClass]
public class Test2Test
{
    private Test2 test2;
    private decimal value;

    [TestInitialize]
    public void Setup()
    {
        var test1Mock = new Mock<ITest1>();
        test1Mock.SetupGet(m => m.Value).Returns(value);
        test1Mock
            .Setup(m => m.Increment())
            .Callback(() => value++);

        this.test2= new Test2(test1Mock.Object);
    }

    [TestMethod]
    public void Get_Returns0()
    {
        Assert.AreEqual(0, this.test2.Get());
    }

    [TestMethod]
    public void Get_AfterIncrement_Returns1()
    {
        this.test2.Increment();
        Assert.AreEqual(1, this.test2.Get());
    }
}

2番目のテストは常に0を返します。なぜこれが発生するのですか?

4

1 に答える 1

1

解決策は、変数の代わりにアクションを次のように返すことです。

.Return(() => value)それ以外の.Return(value)

答えはここにあります

于 2013-06-04T10:28:20.580 に答える