当尝试断言属性是否等于某个属性只有一个setter时,我遇到了一个问题。
这是我的视图界面:
public interface ICalculatorView
{
int Number1 { get; }
int Number2 { get; }
string MathmaticalCalculation { get; set; }
int Answer { set; }
}
我只在屏幕上显示Answer
并且不使用get访问器,这就是为什么它只在属性上设置了访问器。
这是我实现界面的视图:
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
属性,一切都会正常工作。但可以肯定的是,我不需要修改我编写的任何代码,以便我可以运行测试方法,或者我可以吗?
答案 0 :(得分:1)
看起来你正在使用Moq。你可以这样做(对于断言):
mockICalculatorView.VerifySet(m => m.Answer = 4, Times.Once());
答案 1 :(得分:0)
如果你想测试答案是否为4,当然你必须有一些方法来获得结果。如果该值永远不会保存在任何地方,则无法检索它。