为WPF项目创建单元测试

发表于:2008-09-25来源:作者:点击数: 标签:单元项目WPF
可能你已发现一个问题,我们无法使用VS对WPF项目创建 单元测试 (VS2005不行,VS2008我没试过,但据说也不行),这让人很郁闷,这里将介绍如何使用NUnit来对WPF项目创建单元测试并解决其中的难题(但利用NUnit来对WPF创建单元测试时并不会像针对.Net2.0一样容易,可能
可能你已发现一个问题,我们无法使用VS对WPF项目创建单元测试(VS2005不行,VS2008我没试过,但据说也不行),这让人很郁闷,这里将介绍如何使用NUnit来对WPF项目创建单元测试并解决其中的难题(但利用NUnit来对WPF创建单元测试时并不会像针对.Net2.0一样容易,可能会出现一些小问题).

1,对普通类(非WPF UI组件)进行测试:

这和在.Net2.0中使用NUnit进行测试时一样,不会出现任何问题,参考下面的代码:
复制  保存
[TestFixture]
public class ClassTest
{
    [Test]
    public void TestRun()
    {
        ClassLibrary1.Class1 obj = new ClassLibrary1.Class1();

        double expected = 9;
        double result = obj.GetSomeValue(3);

        Assert.AreEqual(expected, result);
    }
}

2,对WPF UI组件进行测试

使用NUnit对WPF UI组件(比如MyWindow,MyUserControl)进行测试的时候,NUnit会报如下异常:“The calling thread must be STA, because many UI components require this”。
下面是错误的测试代码:
复制  保存
[TestFixture]
public class ClassTest
{
    [Test]
    public void TestRun()
    {
        WindowsApplication1.Window1 obj = new WindowsApplication1.Window1();

        double expected = 9;
        double result = obj.GetSomeValue(3);

        Assert.AreEqual(expected, result);
    }
}

单击显示全图,Ctrl+滚轮缩放图片
为了让调用线程为STA,我们可以编写一个辅助类CrossThreadTestRunner:

原文转自:http://www.ltesting.net