Silverlight单元测试

7
我正在使用Silverlight UnitTest框架,有没有好的例子可以用它来单元测试应用程序呢?我已经成功地使用它来单元测试Silverlight类库。
如果您能提供一些指针和链接,我将不胜感激。
谢谢, Nath
4个回答

8
我写了几篇关于Silverlight单元测试框架的博客文章。第一篇介绍了如何使用异步属性测试异步代码以及一些更高级的功能。该帖子可以在http://jonas.follesoe.no/UnitTestingAsynchronousSilverlightCode.aspx找到。
第二篇文章介绍了如何使用标签属性组织您的测试。这使您能够在同一个测试套件中拥有单元测试/集成测试/性能测试/UI测试,但每次只执行一个特定类别。该博客文章可以在http://jonas.follesoe.no/EfficientTestingInSilverlight2UsingTags.aspx找到。

4

嗨Page,那是我的第一想法,但那似乎更像是自定义控件,而我更希望有一个单一的应用程序级别的示例。谢谢, Nath - NikolaiDante

2
这是我在Silverlight 5中进行单元测试的明确指南。如果您不知道从哪里开始,这将引导您所有必须执行的步骤。此指南涉及测试项目内部。您不需要第二个或第三个Silverlight项目来进行单元测试。

0.) 关闭您的Silverlight项目。

1.) 在此处下载Silverlight 5工具包 here 并安装它。

2.) 打开Windows资源管理器,进入C:并搜索这两个文件:

Microsoft.Silverlight.Testing.dll

Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll

如果你找不到它们,那么有问题了。

3.) 在GAC中注册这两个DLL。请执行以下操作:

管理员身份打开Visual Studio控制台。复制每个语句并在控制台中执行:

gacutil /i "C:\Program Files\Microsoft SDKs\Silverlight\v5.0\Toolkit\dec11\Testing\Microsoft.Silverlight.Testing.dll"

gacutil /i "C:\Program Files\Microsoft SDKs\Silverlight\v5.0\Toolkit\dec11\Testing\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll"

请记住,DLL的路径可能在您的计算机上不同。只需输入适合您计算机的正确路径即可。

4. 打开您的Silverlight项目,并将上述两个DLL作为参考添加到Silverlight项目中。不要添加到您的Web项目中。

5. 将以下类添加到您的项目中。放在哪里都可以。我有一个额外的用于测试的文件夹,但这并不重要。

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Silverlight.Testing;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Test
{
[TestClass]
public class Test_Svc_Login 
{
    [TestMethod]
    public void Always_True()
    {
        Assert.IsTrue(true);
    }

    [TestMethod]
    public void Always_False()
    {
        Assert.IsTrue(false);
    }

    [TestMethod]
    public void Even_MoreAlways_False()
    {
        Assert.IsTrue(false);
    }
}

}

6. 按下 F6 键,尝试编译。此时应该一切正常。
7. 在您的项目中找到文件“App.xaml.cs”。在该文件内,您会找到以下语句。当然,“new Gui.MainPage();” 在您的项目中可能会有所不同。只需搜索 RootVisual 即可。
 this.RootVisual = new Gui.MainPage();

你可以用以下代码块替换这个语句。
#if DEBUG
            if (System.Diagnostics.Debugger.IsAttached)
            {
                //You hit F5 ONLY
                this.RootVisual = new Gui.MainPage();
            }
            else
            {
                //You hit CTRL + F5 
                RunUnitTests();
            }
#else
            //You are in Release Mode. You hit whatever you want.
            this.RootVisual = new Gui.MainPage();
#endif 

现在您需要将以下程序添加到您的App.xaml.cs类中:
 private void RunUnitTests()
        {

#if DEBUG
            //You hit CTRL + F5 
            var settings = new UnitTestSettings();
            settings.TestHarness = new UnitTestHarness();
            settings.StartRunImmediately = true;
            settings.TestAssemblies.Add(Assembly.GetExecutingAssembly());
            this.RootVisual = UnitTestSystem.CreateTestPage(settings); 
#endif
        }

8. 按F6键检查是否一切正常。
9. 按F5键查看是否仍然可以正常调试。按Ctrl + F5键开始单元测试。
10. 完成了!现在您可以在Silverlight 5中进行单元测试。
请记住,工具包中的两个DLL仍处于“实验”模式。没有官方支持。还要记住,这种方法是关于在项目内运行测试。现在,您甚至可以在客户机器上以发布模式运行这些测试。如果要这样做,必须更改#if DEBUG语句,但我认为您知道这一切是关于什么的。
当然,您可以将此方法更改为在单独的项目中进行单元测试。
愉快的编码。
提示:如果在注册这两个DLL后遇到System.Core.dll问题,请使用gacutil再次注册System.Core.dll。像这样:gacutil /i“C:\ Program Files \ Reference Assemblies \ Microsoft \ Framework \ Silverlight \ v5.0 \ System.Core.dll”。

非常非常感谢!这正是我一直在寻找的,并且运行得很好。我遇到了你提到的System.Core问题,但重新注册也解决了这个问题。 - Martin Lottering

1

你还应该尝试使用SilverUnit进行真正的Silverlight单元测试, 它是一个非常易于使用的框架,同时还可以保护您免受Silverlight事件处理的复杂性的影响。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接