2013-01-22 41 views
1

我想做一個非常簡單的事情:設置一個屬性的初始值,調用回調應修改屬性值的方法,並在最後讀取屬性。如何激活將被間接修改的屬性?

Class 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()); 
    } 
} 

第二個測試總是返回0。這究竟是爲什麼?

+0

什麼是'this.counter'? –

+0

@HamletHakobyan它的錯字,固定謝謝。 – JoanComasFdz

+1

可能重複[MOQ - 如何使用SetupGet/SetupSet手動創建支持屬性](http://stackoverflow.com/questions/5578269/moq-how-to-manually-create-a-backing-property-using -setupget-setupset) –

回答

1

解決方案是恢復行動,而不是作爲變量:的

.Return(() => value)代替.Return(value)

答發現here