我是TDD的“初学者”,我想弄明白的是如何对视图模型进行单元测试……
我想确保触发了一个属性ProeprtyChanged事件...我使用nunit进行了以下测试。
[Test]
public void Radius_Property_Changed()
{
var result = false;
var sut = new MainViewModel();
sut.PropertyChanged += (s, e) =>
{
if (e.PropertyName == "Radius")
{
result = true;
}
};
sut.Radius = decimal.MaxValue;
Assert.That(result, Is.EqualTo(true));
}这是最干净的方法吗,还是有更好的方法来测试这个属性
..。我正在测试的属性视图模型中的代码片段如下所示……
public decimal Radius
{
get { return _radius; }
set
{
_radius = value;
OnPropertyChanged("Radius");
}
}发布于 2012-03-15 02:41:46
这几乎就是你如何做到这一点的。考虑到这是非常简单(和无聊)的代码,这里没有太多可做的事情。将其封装在您自己的可重用库/工具中可能是值得的。或者更好,use existing code。
发布于 2012-03-15 02:43:24
我自己对这类事情的“最小”测试略有不同。我不会检查事件是否被引发,而是通常会验证它是否恰好被引发一次。
发布于 2012-03-15 03:34:20
Granite的测试框架让您可以像这样编写测试:
[TestMethod]
public void ChangeTrackingModelBase_BasicFunctionalityTest()
{
var person = new ChangeTrackingPerson();
var eventAssert = new PropertyChangedEventAssert(person);
Assert.IsNull(person.FirstName);
Assert.AreEqual("", person.LastName);
eventAssert.ExpectNothing();
person.FirstName = "John";
eventAssert.Expect("FirstName");
eventAssert.Expect("IsChanged");
eventAssert.Expect("FullName");
person.LastName = "Doe";
eventAssert.Expect("LastName");
eventAssert.Expect("FullName");
person.InvokeGoodPropertyMessage();
eventAssert.Expect("FullName");
person.InvokeAllPropertyMessage();
eventAssert.Expect("");
}http://granite.codeplex.com/SourceControl/list/changesets
它是基于MSTest的,但是您可以很容易地重写它以使用NUnit。
https://stackoverflow.com/questions/9707954
复制相似问题