2014-01-24 26 views
0

我試圖斷言一個屬性是否等於一個數字,當屬性只有一個setter時有問題。Assert.AreEqual在一個屬性只有一個Setter,在MVP單元測試

這是我的看法接口:

public interface ICalculatorView 
    { 
     int Number1 { get; } 
     int Number2 { get; } 
     string MathmaticalCalculation { get; set; } 
     int Answer { set; } 
    } 

我只在屏幕上顯示Answer和不使用get訪問,這就是爲什麼它只是對財產set訪問。

這是我的觀點,即實現該接口:

CustomerDetailsPresenter _presenter; 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      _presenter = new CustomerDetailsPresenter(this, this, 
       new GetCustomerDetailsModel()); 
      if (!Page.IsPostBack) 
      { 
       _presenter.Initialize(); 
       customerIdDDL.DataSource = ListOfCustomerIds; 
       customerIdDDL.DataBind(); 
      } 
     } 
     protected void performCalcButton_Click(object sender, EventArgs e) 
     { 
      MathmaticalCalculation = ((Button)sender).Text; 
      _presenter.PerformCalculation(); 
     } 

     public int Number1 
     { 
      get { return int.Parse(number1TextBox.Text); } 
     } 

     public int Number2 
     { 
      get { return int.Parse(number2TextBox.Text);} 
     } 

     public string MathmaticalCalculation { get; set; } 

     public int Answer 
     { 
      set { answerLabel.Text = value.ToString(); } 
     } 
} 

我希望能夠單元測試在單元測試中執行的計算方法。下面是測試方法:

[TestMethod] 
     public void TestCalcWorks_AddingTwoNumbers() 
     { 
      // Arrange 
      var mockIDetailsView = new Mock<ICustomerDetailsView>(); 
      var mockICalculatorView = new Mock<ICalculatorView>(); 
      var mockIGetCustomerDetailsModel = new Mock<IGetCustomerDetailsModel>(); 
      var mockTestPresenter = new Mock<CustomerDetailsPresenter>(); 

      var testPresenter = new CustomerDetailsPresenter(mockIDetailsView.Object, 
       mockICalculatorView.Object, mockIGetCustomerDetailsModel.Object); 

      mockICalculatorView.Setup(x => x.Number1).Returns(2); 
      mockICalculatorView.Setup(x => x.Number2).Returns(2); 
      mockICalculatorView.Setup(x => x.MathmaticalCalculation).Returns("+"); 

      // Act 
      testPresenter.PerformCalculation(); 
      // Assert 

      Assert.AreEqual(mockICalculatorView.Object.Answer, 4); 
     } 

這不會編譯爲mockICalculatorView.Object.Answer沒有get訪問。我知道我可以將其添加到Answer屬性,一切都會正常工作。但是,當然,我不需要修改我編寫的任何代碼,以便我可以運行測試方法,或者我可以嗎?

回答

1

它看起來像你使用Moq。你可以這樣做,而不是(爲斷言):

mockICalculatorView.VerifySet(m => m.Answer = 4, Times.Once());

+0

正是我之後的工作,因爲我想,謝謝你的幫助! – Win

0

如果你想測試,如果答案是4,當然,你必須有得到結果的某種方式。如果該值從未保存在任何地方,則無法檢索。

相關問題