对 Windows Phone 8 应用进行单元测试

2014/6/18

本主题包含针对 Windows Phone 应用的简单单元测试的演练。

您可以使用单元测试在应用中测试功能的各个方法和单元。单元测试向开发人员和测试人员提供了一种快速方法,可查找他们使用 Visual C#、Visual Basic 或 Visual C++ 编写的应用方法中的逻辑错误。

本主题介绍安装了 Visual Studio 2012 Update 2 后 Microsoft Visual Studio Express 2012 for Windows Phone 中可用的单元测试功能。更高版本的 Visual Studio(例如 Visual Studio Professional 和 Visual Studio Ultimate)具有其他单元测试功能。

有关 Visual Studio 中的单元测试的更多信息,请参见使用单元测试验证代码

重要说明重要说明:

针对 Windows Phone 项目的单元测试需要使用 Visual Studio 2012 Update 2。以下所述的单元测试功能和工具未包含在 Windows Phone SDK 8.0 中。

本主题包括以下部分。

要创建并运行针对 Windows Phone 应用的单元测试,您需要在 Visual Studio 中执行以下任务。

  1. 将单元测试应用项目添加到包含 Windows Phone 项目的解决方案。

    在单元测试项目中,添加对 Windows Phone 项目的引用。

  2. 在单元测试项目中,创建单元测试。

  3. 在工具栏上,选择要在其上运行测试的仿真程序或目标设备。

    打开测试资源管理器。在测试资源管理器中,运行单元测试。

运行测试后,修复测试在您的代码中找到的错误并根据需要重复测试。

以下各节对这些任务进行了描述。

本节开始进行针对 Windows Phone 应用的简单单元测试的演练。以下各节仍然包含本演练。本示例基于演练:创建并运行针对托管代码的单元测试

设置 Windows Phone 项目示例

  1. 在现有的一个 Windows Phone 项目中,添加名为 BankAccount 的新类。

  2. 在新的类文件中,将默认代码替换为以下代码。

    然后,您将创建针对此类中 Debit 方法的单元测试。

    using System;
    
    namespace Bank
    {
        public class BankAccount
        {
            public string CustomerName { get; private set; }
            public double Balance { get; private set; }
    
            private BankAccount()
            {
            }
    
            public BankAccount(string customerName, double balance)
            {
                CustomerName = customerName;
                Balance = balance;
            }
    
            public void Debit(double amount)
            {
                if (amount > Balance)
                {
                    throw new ArgumentOutOfRangeException("amount");
                }
    
                if (amount < 0)
                {
                    throw new ArgumentOutOfRangeException("amount");
                }
    
                Balance += amount;
            }
        }
    }
    
  3. 生成 Windows Phone 项目以确保无错误。

使用单元测试应用模板在应用项目所在的同一解决方案中创建单独项目。

将单元测试项目添加到解决方案

  1. 在 Visual Studio 的“解决方案资源管理器”中,右键单击所需的解决方案,然后选择“添加” | “新建项目”

  2. “添加新项目”窗口中的 Windows Phone 模板列表中,选择“Windows Phone 单元测试应用”。将新项目命名为 BankAccountTest,然后单击“确定”

  3. “解决方案资源管理器”的新 BankAccountTest 项目中,添加对 Windows Phone 项目的引用。

    1. 在新 BankAccountTest 项目中,右键单击“引用”,然后选择“添加引用”

    2. “引用管理器”窗口中,选择“解决方案”

    3. 在解决方案的项目列表中,选中 Windows Phone 项目旁边的框,然后单击“确定”

添加了单元测试项目和引用后,该解决方案如下所示:

A solution that includes a unit test project

新的单元测试项目包含名为 UnitTest1 的默认类文件。此类包含以下默认代码,其中包括 TestMethod 的单个空实例。

using System;
using Microsoft.VisualStudio.TestPlatform.UnitTestFramework;

namespace BankAccountTest
{
    [TestClass]
    public class BankAccountTest
    {
        [TestMethod]
        public void TestMethod1()
        {
        }
    }
}

创建测试方法

  1. 在 Visual Studio 的单元测试项目中,打开 UnitTest1.cs

  2. UnitTest1 类文件中,将默认代码替换为以下代码。

    该代码将在您添加到 Windows Phone 项目的 BankAccount 类中创建针对 Debit 方法的单元测试。该单元测试将创建 BankAccount 类的实例,借入指定金额,然后测试新余额是否等于预期余额。

    using System;
    using Microsoft.VisualStudio.TestPlatform.UnitTestFramework;
    using Bank;
    
    namespace BankAccountTest
    {
        [TestClass]
        public class BankAccountTests
        {
            [TestMethod]
            public void Debit_WithValidAmount_UpdatesBalance()
            {
                // arrange
                double beginningBalance = 11.99;
                double debitAmount = 4.55;
                double expected = 7.44;
    
                BankAccount account = new BankAccount("New Customer", beginningBalance);
    
                // act
                account.Debit(debitAmount);
    
                //assert
                double actual = account.Balance;
                Assert.AreEqual(expected, actual, 0.001, "Account not debited corrected");
            }
        }
    }
    
  3. 生成单元测试项目以确保无错误。

您通常在 Visual Studio 中使用测试资源管理器运行创建的单元测试。

在 Visual Studio 中运行测试

  1. 在 Visual Studio 的工具栏上,选择要在其上运行测试的仿真程序或目标设备。

  2. 在 Visual Studio 中,如果测试资源管理器尚未打开,则选择“测试” | “Windows” | “测试资源管理器”“测试资源管理器”窗口包含您创建的单个测试,如下所示:

    Commands available in the Test Explorer windows
  3. 测试资源管理器中,单击“全部运行”

    该测试将报告失败,因为在 Debit 方法的代码中实际上存在一个错误。因此,借入指定金额后,实际余额不等于预期余额。

    Test Explorer shows a unit test that failed
  4. 在 Windows Phone 项目中,修复 Debit 方法的代码中的错误。为此,需要将 Balance += amount; 更改为 Balance -= amount;

  5. 生成 Windows Phone 项目以确保无错误。

  6. 测试资源管理器中,再次单击“全部运行”

    该测试将报告成功。您已成功完成针对 Windows Phone 应用的首次单元测试。

    Test Explorer shows a test that passed

用于在 Visual Studio 中运行单元测试的方法

您可以使用以下方法之一在 Visual Studio 中运行单元测试。您也可以在命令提示符下运行单元测试,如下节所述。不能使用 F5 或 Ctrl-F5 运行单元测试项目。

在 Visual Studio 中运行单元测试

  • 测试资源管理器中,使用工具栏上的命令,例如“全部运行”

  • 测试资源管理器中,选择一个或多个测试,然后右键单击并通过上下文菜单运行选定的测试。

  • “测试”菜单上,通过使用“运行”“调试”子菜单上的选项之一运行测试。

  • 在单元测试类的代码窗口中,右击并选择“运行测试”“调试测试”

在命令提示符下运行单元测试

您也可以通过使用 vstest.console 应用在命令提示符下运行单元测试。当您在命令提示符下运行单元测试时,可以使用可选的 .runsettings 文件指定目标设备,而不是默认仿真程序。

在默认仿真程序中在命令提示符下运行单元测试

  • 通过使用 vstest.console 应用并提供 XAP 文件的名称,在命令提示符下运行单元测试项目。

    vstest.console 应用通常位于以下文件夹中:

    C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow

    使用类似于以下示例的命令:

    vstest.console D:\Projects\BankAccountTest\Bin\x86\Debug\BankAccountTest_Debug_x86.xap
    

使用 .runsettings 文件在命令提示符下运行单元测试

  1. 创建并保存 .runsettings 文件。有关更多信息,请参见使用 .runsettings 文件配置单元测试

  2. .runsettings 文件中,添加 MSPhoneTest 元素和 TargetDevice 元素来指定目标设备,如以下示例所示。

    <?xml version="1.0" encoding="utf-8"?>
    <RunSettings>
      . . .
      <MSPhoneTest>
        <TargetDevice>Emulator WVGA</TargetDevice>
      </MSPhoneTest>
    </RunSettings>
    
    
    
  3. 生成单元测试项目。

  4. 通过使用 vstest.console 应用并提供 XAP 文件和 .runsettings 文件的名称,在命令提示符下运行单元测试项目。

    vstest.console 应用通常位于以下文件夹中:

    C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow

    使用类似于以下示例的命令:

    vstest.console D:\Projects\BankAccountTest\Bin\x86\Debug\BankAccountTest_Debug_x86.xap /Settings:D:\Projects\BankAccountTest\BankAccountTest.runsettings
    

在测试结果 (.trx) 文件中捕获单元测试结果的步骤

  1. /logger:trx 添加到您在命令提示符下运行的命令。例如:

    vstest.console D:\Projects\BankAccountTest\Bin\x86\Debug\BankAccountTest_Debug_x86.xap /logger:trx
    
  2. 运行该命令。该命令将在当前位置创建 TestResults 文件夹,然后在该文件夹中创建测试结果 (.trx) 文件。

    重要说明重要说明:

    该命令需要权限才能创建输出文件夹和文件。如果您要在用户组成员无法创建文件夹的位置运行该命令,您需要以管理员身份打开命令提示符窗口。例如,如果您是从 vstest.console 位置,而不是从项目文件夹的位置运行该命令,您需要执行此操作。

    或者,您可以在 .runsettings 文件中指定 TestResults 文件夹的位置(如本主题前面所述)。在 .runsettings 文件中,添加 RunConfiguration 元素和 ResultsDirectory 元素来指定目标文件夹,如以下示例所示。

    <?xml version="1.0" encoding="utf-8"?>
    <RunSettings>
      <!-- Configurations that affect the Test Framework -->
      <RunConfiguration>
        <!-- Path relative to location of runsettings file -->
        <ResultsDirectory>.\TestResults</ResultsDirectory>
        . . .
      </RunConfiguration>
       . . .
      <MSPhoneTest>
        <TargetDevice>Emulator WVGA</TargetDevice>
      </MSPhoneTest>
    </RunSettings>
    

在测试资源管理器中组织和查找测试

测试资源管理器中,您可以通过以下功能组织和查找测试。

在测试资源管理器中组织和查找测试

  • 单击分组按钮,按照“类”、“持续时间”、“结果”、“特征”或“项目”对测试进行分组。

  • 在搜索框中键入搜索术语,以查找一个或多个测试。

  • 要筛选测试列表,请从搜索框旁边的下拉列表中选择筛选条件来筛选测试列表。

以下屏幕快照显示了测试资源管理器的这些功能。

Search box and filter options in Test Explorer

针对 Windows Phone 应用和 Windows Store 应用的单元测试之间的差异

下表描述了针对 Windows Phone 应用的单元测试和针对 Windows Store 应用的单元测试之间的差异。

功能

针对 Windows Phone 应用的单元测试

针对 Windows Store 应用的单元测试

运行测试的目标

仿真程序或电话

始终在本地运行测试。

功能集

以下功能不受支持:

  • UITest 方法

  • 异步 Assert 方法

列出的功能(不受 Windows Phone 应用支持)受 Windows 应用商店应用支持。

Team Build 支持

不支持。

包括支持将单元测试作为 Team Build 的一部分运行。

显示:
© 2015 Microsoft