首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试ViewModel PropertyChanged事件

测试ViewModel PropertyChanged事件
EN

Stack Overflow用户
提问于 2012-03-15 02:31:43
回答 4查看 2.5K关注 0票数 6

我是TDD的“初学者”,我想弄明白的是如何对视图模型进行单元测试……

我想确保触发了一个属性ProeprtyChanged事件...我使用nunit进行了以下测试。

代码语言:javascript
复制
[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));
}

这是最干净的方法吗,还是有更好的方法来测试这个属性

..。我正在测试的属性视图模型中的代码片段如下所示……

代码语言:javascript
复制
public decimal Radius
{
    get { return _radius; }
    set
    {
        _radius = value;
        OnPropertyChanged("Radius");
    }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-15 02:41:46

这几乎就是你如何做到这一点的。考虑到这是非常简单(和无聊)的代码,这里没有太多可做的事情。将其封装在您自己的可重用库/工具中可能是值得的。或者更好,use existing code

票数 4
EN

Stack Overflow用户

发布于 2012-03-15 02:43:24

我自己对这类事情的“最小”测试略有不同。我不会检查事件是否被引发,而是通常会验证它是否恰好被引发一次。

票数 1
EN

Stack Overflow用户

发布于 2012-03-15 03:34:20

Granite的测试框架让您可以像这样编写测试:

代码语言:javascript
复制
    [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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9707954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档