Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows phone 7 Windows Phone的单元测试状态_Windows Phone 7_Tdd_Continuous Integration_Windows Phone - Fatal编程技术网

Windows phone 7 Windows Phone的单元测试状态

Windows phone 7 Windows Phone的单元测试状态,windows-phone-7,tdd,continuous-integration,windows-phone,Windows Phone 7,Tdd,Continuous Integration,Windows Phone,我一直在将我的Google Fu推向极限,试图找到最推荐/最稳定的Windows Phone应用程序TDD+CI设置。有谁能成功地为我指出正确的方向吗 以下是我希望能够做到的(如果可能的话): 为不需要电话功能的视图模型和应用程序服务编写单元测试 通过Resharper或TD.NET直接在Visual Studio中执行测试 在不启动仿真器的情况下,从命令行执行单元测试,并输出XML 最好能够适应SDK更新(就第三方库而言) 因为我想把这个问题作为其他人寻找同样问题的参考资料,所以我更希望避

我一直在将我的Google Fu推向极限,试图找到最推荐/最稳定的Windows Phone应用程序TDD+CI设置。有谁能成功地为我指出正确的方向吗

以下是我希望能够做到的(如果可能的话):

  • 为不需要电话功能的视图模型和应用程序服务编写单元测试
  • 通过Resharper或TD.NET直接在Visual Studio中执行测试
  • 在不启动仿真器的情况下,从命令行执行单元测试,并输出XML
  • 最好能够适应SDK更新(就第三方库而言)
因为我想把这个问题作为其他人寻找同样问题的参考资料,所以我更希望避免回答以下问题:

  • 未完成或放弃的项目的开放源代码端口
  • 仅在某人的博客上作为附件提供的项目

我也想进行完整的BDD风格的验收测试,但是。

我认为这件事与您编写测试的方式有关

  • 最终,一些代码将不得不触及一些特定于手机的东西。这些应该被隔离为依赖项并伪造。我还没有找到一个合适的方法来让单元测试在手机内部实际运行。不幸的是,这些依赖关系对我来说还没有经过测试
  • 使用NUnit for Silverlight可以获得断言:
  • 我已经使用Resharper运行了单元测试,没有问题。类似地,您可以使用nunit控制台运行测试并获得XML输出
  • Ayende针对Silverlight的Rhino Mock适用于模拟/存根依赖项
  • 持续集成有点棘手。WP7 SDK在服务器平台上不可用,因此我在Windows 7上为我的CI构建了一个新SDK。也许有办法绕过这个限制,但我没有费心
您需要的另一个工具是。这将允许您使用EventTrigger和ICommand而不是事件,因为测试事件需要大量的工作,并且不能通过DataContext绑定

关于我如何设计我的应用程序:

ViewModel可以接受任意数量的依赖项,这些依赖项可以通过使用解决

XAML背后的实际代码解析了ViewModel并将其设置为数据上下文。这是不幸的,因为这意味着您无法在XAML中设置DataContext,但对于依赖项注入,这是我愿意接受的一种权衡,如下所示:

public partial class SignUpPage
{
    public SignUpPage()
    {
        InitializeComponent();
        DataContext = IoC.Resolve<SignUpViewModel>();
    }
}
公共部分类签名
{
公共签名页()
{
初始化组件();
DataContext=IoC.Resolve();
}
}
幸运的是,这是唯一一个真正出现在我的XAML代码中的C代码。从这里开始,它就是使用绑定和DataContext的非常常规的MVVM


现在,您可以测试ViewModel,注入所需的依赖项(或伪造它们),只要您不尝试使用特定于WP7的内容,它就可以在不进入模拟器的情况下正常运行。

这里有一个链接,指向一位已成功在“手机”上自动执行WP7测试、自动部署应用程序、运行测试并读取结果的人:


它利用了API,在我开始使用它之前,它看起来非常有趣,并且发现大多数函数都抛出了未实现的异常-但是有足够多的函数可以运行自动测试。

我将此答案添加为社区Wiki,以便其他人可以修改它以使其保持最新

单元测试 意图:运行独立的(无电话功能),快速执行测试,通常来自IDE和持续集成服务器,而不需要模拟器(例如TDD视图模型)

我在许多演示文稿中看到的推荐方法涉及引用.NET4项目中的源文件,并针对这些文件运行测试(引用程序集的桌面等价物)。如果您的代码没有使用任何与桌面BCL不同的API,并且您可以处理使引用项目保持最新(不会自动添加新文件)的问题,那么这就足够了

否则,您可以按照以下步骤执行引用桌面CLR中WP7程序集的代码:

  • 向解决方案中添加测试Silverlight 4类库(不是Silverlight for Windows Phone项目)
  • 在类库中,将除mscorelib(基本上是System.*和Microsoft.*)之外的所有框架引用的
    Copy Local
    设置为
    true
  • 从测试库中添加对
    NUnit.Silverlight.Framework.dll和
    NUnit.Silverlight.Compatibility.dll的引用
  • 将测试库中的引用添加到主Windows Phone项目,忽略版本警告
  • 使用ReSharper(tested)或TestDriven.NET在IDE中运行测试
  • 使用的标准.NET 2.0
    nunit console.exe
    从命令行运行测试,传入
    /framework=v4.0
  • (由于WP7使用SL3,所以需要上述许多解决方法。一旦Mango与SL4运行时一起发布,它应该是一个更干净的设置)

    集成测试 意图:在emulator上(按需和CI服务器上)运行与代码外部资源(如电话功能和web服务)交互的长期运行测试

    更新单元测试Windows Phone 8应用程序,包括VS集成和命令行支持。这些测试在emulator中运行,因此我将其包含在集成测试中

    Silverlight测试框架的WP7端口目前不支持这一点(并且只从博客下载)

    同时,我创建了一个新的任务,它添加了一个MSBuild任务,用于启动模拟器并将结果整理成XML文件。最简单的安装方法是添加