是时候使用 MVVM Light ViewModels 进行一些单元测试了。
设置:
- 视觉工作室 2010 SP 1
- Windows Phone 7.1 SDK 候选版本
- Silverlight NUnit 项目-模板
- 最小起订量(4.0.10827 最终)
脚步:
- 创建一个新的 MvvmLight (WP7) -项目
- 将项目转换为 WP7.1
- 创建一个新的 Silverlight NUnit 项目
- 将 WP7-project 引用到 Silverlight NUnit -project
- 向 MainViewModel 添加一个虚拟方法(例如公共字符串 DoSomething())
- 添加一个实例化 MainViewModel、调用虚拟方法和断言的测试。
- 运行测试 -> 一切都应该按预期工作
- 添加对 Moq 的引用
添加带有一些最小起订量的第二种测试方法。我只是从 Moq 的网站复制粘贴了这个演示代码:
var mock = new Mock();
// 哇!没有记录/回放怪异?!:) mock.Setup(framework => framework.DownloadExists("2.0.0.0")) .Returns(true) .AtMostOnce();
// 将 mock.Object 作为协作者并练习它, // 就像在其上调用方法... ILoveThisFramework lovable = mock.Object; bool download = lovable.DownloadExists("2.0.0.0");
// 验证给定的方法确实是用期望值调用的 mock.Verify(framework => framework.DownloadExists("2.0.0.0"));
- 运行测试。
这是我在第 9 步通过 NUnit runner 得到的:
SilverlightNUnitProject2.SilverlightTests.TestSomething:
System.TypeLoadException : Could not load type 'System.Action' from assembly 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
问题:
这里发生了什么?我的设置的哪一部分失败了,为什么?
更新!
我在这里找到了与此问题相关的博客文章。这激发了我下载并尝试与该文章中使用的完全相同版本的 Moq (3.1.416.3)。你知道吗?有用。
我不会把这个作为答案,因为我仍然不知道这里发生了什么。我认为,原来的问题仍然存在。