Windows Phone 开发和单元测试

2023-11-26

我希望启动一个针对 Windows Phone 的项目,但由于缺乏单元测试支持,我有点推迟了[1]。

我习惯于使用 NUnit/ XUnit 来满足我的大部分测试需求,并使用 NSubstitute 之类的东西来进行模拟。据我所知,您不能将这些框架用于 Windows Phone 项目......

经过一些调查,我想知道以下场景是否可行:

  • 使用 Visual Studio 2012
  • 为视图模型和其他逻辑创建可移植类库项目
  • 为单元测试创​​建其他可移植类库项目
  • 等待 Windows Phone 8 SDK[2],然后使用它创建视图。

通过使用可移植类库,我希望单元测试将尽可能接近在设备上运行,而无需打开模拟器。

另一个优点是,我可以看到该解决方案在 TFS 构建环境中工作 - 因此运行测试是 CI 构建的一部分......

我希望了解人们的意见,看看这是一个明智的举动,还是一个愚蠢的差事......

Thanks,
Kieron

[1] 我知道有一些解决方案,但没有一个看起来像完整的框架测试一样集成 - 我特别谈论的是 VS2012/Resharper 中对运行单元测试的支持,而无需模拟器。

[2] 有谁知道是否可以使用 WP8 SDK 定位 Windows Phone 7.x?


这就是我们所做的:

  • 将特定于手机的逻辑抽象到外观中
  • 尽可能注入依赖项
  • 避免使用任何需要在构造时在 UI 线程上运行的代码,这意味着任何 UI 控件、ImageSource、基本上任何非枚举的 System.Windows 类型(例如 Visibility)
  • 严重依赖 ValueConverters 将业务逻辑转换为 UI 逻辑。

如果你这样做,那么你can使用内置的 Visual Studio 单元测试框架,通过一些技巧来测试 Windows Phone 项目(不仅仅是可移植类库)。

1)第一步是禁用强名称验证,这可以通过以下 Powershell 脚本来完成:

reg DELETE "HKLM\Software\Microsoft\StrongName\Verification" /f
reg ADD "HKLM\Software\Microsoft\StrongName\Verification\*,*" /f
if ($env:PROCESSOR_ARCHITECTURE -eq "AMD64")
{
   reg DELETE "HKLM\Software\Wow6432Node\Microsoft\StrongName\Verification" /f
   reg ADD "HKLM\Software\Wow6432Node\Microsoft\StrongName\Verification\*,*" /f
}
Restart-Service msiserver

请注意,它会在所应用的计算机上创建一个安全漏洞!

2)第二步是创建一个Visual Studio 单元测试项目,一个普通的,不是一个Windows 应用商店单元测试项目.

3)第三步是包括Windows 手机 8项目作为参考。这有效,您现在可以使用微软假货使mscorlib and 系统.dll,允许你伪造类似的类型DateTime在你的单元测试中,这是一个非常方便的功能。

4)第四步是获取以下 Windows Phone 程序集(以及您需要的任何其他程序集)的本地副本:

  • 系统.Windows
  • 微软手机

它们可以在C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Tools\MDILXAPCompile\Framework folder.

将它们复制到本地/lib/文件夹,然后卸载并编辑单元测试项目的 MSBUILD xml。

Change:

<Reference Include="System.Windows" />
<Reference Include="Microsoft.Phone" />

To

<Reference Include="System.Windows, Version=2.0.6.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, processorArchitecture=MSIL">
  <HintPath>lib\System.Windows.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Phone, Version=8.0.0.0, Culture=neutral, PublicKeyToken=24eec0d8c86cda1e, processorArchitecture=MSIL">
  <HintPath>lib\Microsoft.Phone.dll</HintPath>
</Reference>

另外,为了避免编译时出现警告,请将以下元素添加到第一个元素<PropertyGroup>

<ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>

重新加载、编译、运行测试。瞧,你就完成了。您甚至可以将其与 Microsoft 代码覆盖率功能集成。

NB:单元测试是not这是由 Windows Phone 部门正式支持的,这是我和 Skype 部门的团队找到的解决方法。

奖金答案:

有谁知道是否可以使用 WP8 SDK 定位 Windows Phone 7.x?

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows Phone 开发和单元测试 的相关文章

  • 是否有用于运行测试组的 JUnit TestRunner?

    我目前正在使用 JUnit 4 并且需要将我的测试分为可以以任意组合有选择地运行的组 我知道 TestNG 具有注释测试以将它们分配到组的功能 但我现在无法迁移到 TestNG 看来这可以通过一些自定义注释和自定义 JUnit TestRu
  • QUnit 不会运行测试

    我刚刚开始使用 QUnit 并遇到问题 我目前正在使用 TypeScript 它是一个 JavaScript 编译器 我在与我的主要课程结构平行的课程中进行测试 在每个类中 我都有一个名为 runTests 的函数 为了执行这些测试 我循环
  • Grails 控制器单元测试不会将页面渲染到response.text

    我的环境配置 Java 1 7u51 Grails 2 3 7 我试图断言response text在控制器测试中但它总是带 发生了什么 这是我的用户控制器 class UserController def index flash erro
  • Seam 和 Mock 有什么区别?

    自从我使用 java 遗留代码以来已经有几个月了 这是我正在处理的一些事情 0 测试覆盖率 巨大的函数有时我什至看到有的代码超过300行 许多私有方法 有时还有静态方法 高度紧密耦合的代码 一开始我很困惑 我发现在遗留系统中使用TDD很难
  • 已删除的测试仍保留在 Xcode 测试导航器中

    我最近从我的项目中删除了一些旧的测试类并删除了这些文件 正如预期的那样 文件被移至垃圾箱并在 git 中显示为已删除 不幸的是 它们定义的测试类和测试用例继续出现在测试导航器中 我尝试过常见的方法 例如清理和重建 以及退出并重新打开 Xco
  • 单元测试依赖注入

    我对茉莉花和业力是全新的 我相信我的环境设置正确 并且我能够运行非常基本的单元测试 但是一旦我尝试实例化控制器 我就会收到未知提供程序错误 并且我不确定如何调试它 我需要传入 stateProvider 依赖项吗 我在角种子示例中没有看到这
  • UnitTest HttpResponse WriteAsync 和 CopyToAsync

    我想对下一个方法进行单元测试 public static async Task SetResponseBody HttpResponse response string message var originalResponseBody re
  • Akka.net 和单元测试

    我想使用 Akka net TestKit 编写单元测试 但我有一个问题 我有一个 SubscriptionService 类 它负责将消息传输给选定的参与者 public class SubscriptionService Receive
  • 使用 Retrofit2 和 Mockito 或 Robolectric 进行 Android 单元测试

    我可以测试 Retrofit2beta4 的真实响应吗 我需要 Mockito 或 Robolectic 吗 我的项目中没有活动 它将是一个库 我需要测试服务器是否正确响应 现在我有这样的代码并卡住了 Mock ApiManager api
  • Cucumber Java 与 Spring Boot 集成 - Spring @Autowired 抛出 NullPointer 异常

    我正在为 Spring boot 应用程序编写 cucumber java 单元测试来测试每个功能 当我与 Spring Boot 集成时 Autowired 类抛出 NullPointer 异常 Spring Boot应用程序类 Spri
  • MvvmCross 在 Xamarin Studio 中工作吗?

    我花了一段时间得到一个直接的答案 我做了很多搜索和阅读 并尝试了很多东西 有时听起来是可能的 有时听起来只有通过进行链接和其他操作才可能实现 这是我试图避免的事情 我是 PCL 的忠实粉丝 我使用 Visual Studio 2012 Xa
  • 何时使用模拟框架?

    因此 我正在使用模拟框架 Moq 进行单元测试 并且想知道何时应该使用模拟框架 以下两个测试之间的优点 缺点是什么 public class Tests Fact public void TestWithMock Arrange var r
  • 从文件夹中删除文件的单元测试方法

    我们有一个方法 它将文件夹名称和天数作为参数 public void Delete string folder int days var files Directory GetFiles folder foreach var file in
  • 使用 Moq 和 EF 4.1 模拟工作单元

    我正在通过 Contoso 示例进行一些 TDD 实践 并且我用于检索学生的测试正在通过 我创建新学生的测试失败了 尽管实际代码有效 因为我相信 DBContext 没有被嘲笑 为了通过这个测试 我应该重构什么 测试失败 如下所示 Cont
  • 具有 SQL 代码的 C# 方法上的 Microsoft Fakes(垫片和/或存根)

    我正在尝试更多地了解单元测试 使用开箱即用的功能 我相信它是 MSTest exe 和 Microsoft Fakes 存根和垫片 我正在使用 Visual Studio 2012 Ultimate 和 Net 4 5 Framework
  • 寻找自定义 SynchronizationContext 的示例(单元测试所需)

    我需要定制同步上下文 http msdn microsoft com en us library system threading synchronizationcontext aspx that 拥有一个运行 Posts 和 Sends
  • Googletest 参数化测试崩溃

    我刚刚了解到googletest 中的值参数化单元测试 https github com google googletest blob master docs advanced md value parameterized tests并想在
  • 单元测试:创建“模拟”请求来模拟 MVC 页面请求

    如何为我的 asp net mvc 应用程序创建模拟请求以进行单元测试 我有什么选择 我在我的操作中使用 FormsCollection 因此我也可以模拟表单输入数据 您只需创建 FormCollection 的新实例并在其中添加数据即可
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 我可以使用 moq Mock 来模拟类而不是接口吗?

    正在经历https github com Moq moq4 wiki Quickstart https github com Moq moq4 wiki Quickstart 我看到它 Mock 一个接口 我的遗留代码中有一个没有接口的类

随机推荐

  • 什么是锯齿状数组?

    什么是锯齿状数组 在 C 中 任何例子以及何时应该使用它 交错数组是数组的数组 string arrays new string 5 这是五个不同字符串数组的集合 每个数组的长度都可以不同 它们也可以是相同的长度 但重点是没有保证他们就是
  • ScrollViewer 上 VerticalOffset 属性的双向绑定?

    我在 Silverlight 3 0 中有一个视图和一个视图模型 该视图包含一个标准的 ScrollViewer 其中包含动态内容 根据 ScrollViewer 中的内容 用户可能已向下滚动内容一半 然后执行导致 ScrollViewer
  • 使用 CSS @font-face 时,浏览器按什么顺序使用不同类型?

    使用时 font faceCSS 中是否记录了每种主要浏览器中适用的字体类型 以及如果缺少一种或多种字体类型 它们对不同字体类型的优先级 我尝试用谷歌搜索答案 但失败了 font face font family myfont src ur
  • 将 int 转换为 BCD 字节数组

    我想使用 BCD 将 int 转换为 byte 2 数组 所讨论的 int 将来自表示年份的 DateTime 并且必须转换为两个字节 是否有任何预制函数可以执行此操作 或者您能给我一个简单的方法来执行此操作吗 example int ye
  • AlertDialog 按钮的图像

    是否可以添加drawables到positive negative and neutralAlertDialog 的按钮 如果是 那么如何 Since onPrepareDialog已弃用 您可以使用onShowListener反而 此外
  • ForbiddenError:无效的 csrf 令牌,express js

    我试图让 csurf 工作 但似乎偶然发现了一些东西 到目前为止的代码如下所示 索引 ejs
  • T-SQL 输出子句:如何访问旧的身份 ID

    我有一个 T SQL 语句 它基本上执行插入并将一些插入的值输出到表变量以供以后处理 有没有办法让我将所选记录的旧身份 ID 存储到我的表变量中 如果我使用下面的代码 我会得到 无法绑定多部分标识符 a ID 错误 DECLARE act
  • 如何使用 ACTION_VIDEO_CAPTURE 操作对相机的意图将文件的输出设置为 mp4?

    当我使用本机应用程序相机拍摄视频时 输出文件的扩展名为 3gp 我需要使用 ACTION VIDEO CAPTURE 意图操作来意图相机 这将生成一个具有 mp4 文件扩展名的文件 我该怎么做 您可以继续尝试 dis 代码 intent n
  • Swagger PHP - 如何定义嵌套属性?

    我正在使用 Swagger PHP 大多数定义都很容易定义 但我遇到了一个特定数据块的问题 该数据块不属于单独的类 而是属于关联数组 我希望显示的 json 响应 针对此问题进行了简化 id 1 status published gps l
  • ipython %timeit“赋值前引用的局部变量‘a’”

    我正在尝试运行以下代码 但我得到了local variable a referenced before assignment a x for x in range 10 b x for x in range 10 timeit a b 该语
  • 如何重新启动 git 仓库?

    我从我的一个旧项目中获取了一个存储库 并编辑了这些文件 以便我可以将其用作新项目的 骨架 说我在这里 骨架 框架 我已经在那里编辑了存储库 我将如何使用该目录中的这些文件重新启动此存储库 什么should我已经做好了 我所做的就是拉取存储库
  • jQuery 单击处理函数不会在 DOM 加载后添加的元素上触发

    我相信我可以使用 live 来做到这一点 但该方法已被弃用 问题是这样的 我有一个点击处理函数 它应该在任何具有 myClickEl 类的元素上触发 这对于加载时文档中存在的 myClickEl 元素效果很好 但是 如果我在 DOM 加载后
  • Spring配置C3P0与Hibernate?

    我有一个 Spring JPA 应用程序 其中 Hibernate 作为 JPA 提供者 我通过以下方式在 Spring 中配置了 C3P0 数据源
  • ASP .NET Core webapi在中间件中设置cookie

    我试图在执行操作后设置一个 cookie 努力使其工作 如果我从控制器而不是中间件设置它 我就能看到cookie 我已经按照配置顺序进行了操作 但什么也没有 代码示例来自一个干净的 webapi 创建的项目 所以如果有人想玩它很简单 只需创
  • Python-从文本文件中查找行号[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在编写在文本文件中查找的代码 并查看输入是否在其中 E g 我输入 披萨 我的文本文件包含 bread pizza pasta tomato 有没有办法打印披萨一词所在的行号
  • 基于 os 系列的 Maven 条件

    我正在尝试执行以下操作
  • 压缩和未压缩的 .wav 文件

    压缩和未压缩的 wav 文件有什么区别 The WAV格式是 Windows 中音频文件的容器格式 WAV 文件由标题和内容组成 标头包含有关 WAV 文件中包含的音频的大小 持续时间 采样频率 分辨率以及其他信息 通常 标头之后是实际的音
  • 使用 print.xtable 更改表格的字体大小

    我想使用 print xtable 更改表格的字体大小 Using print xT size tiny 有效 但我不知道其他尺寸选项 像 size 7pt 这样的东西会很好 您可以使用以下命令选择特定的字体大小 fontsize
  • 捕获更通用的异常类型是否有好处?

    如果我们要捕捉特定形式的IOException 或任何其他类型的 事实上 我们只尝试捕获几个 并为它们定义明确的输出 说 FileNotFoundException ZipException 我们是否应该始终把它拖下来并用一个覆盖所有基地
  • Windows Phone 开发和单元测试

    我希望启动一个针对 Windows Phone 的项目 但由于缺乏单元测试支持 我有点推迟了 1 我习惯于使用 NUnit XUnit 来满足我的大部分测试需求 并使用 NSubstitute 之类的东西来进行模拟 据我所知 您不能将这些框