【问题标题】:Using Moles for TDD with HttpWebRequest通过 HttpWebRequest 使用 Moles 进行 TDD
【发布时间】:2012-10-28 17:55:31
【问题描述】:

我正在使用带有 SP1 的 VS2010(在同一台机器上也安装了 VS2012)。痣 1.0 该项目使用.NET 4 我将 moles 程序集添加到 system.dll 并在编译时出现以下错误

错误 46 名称空间“System.Collections.Generic”中不存在类型或名称空间名称“IReadOnlyList”(您是否缺少程序集引用?)[C:\Test\obj\Debug\Moles\s\m.g. csproj] C:\Test\m.g.cs 测试

据我所知,IReadOnlyList .NET 4.5。

还有其他人遇到过这个问题吗?

【问题讨论】:

  • 看来,如果你 .NET 4.5 和 moles,moles 想要反映 .net 4.5 程序集。解决方法在here 中进行了描述,但它仅给出了 mscore 的示例。如果你想使用 system.net 你必须添加更多 标签
  • 谢谢你,哈伦。您用于 System.Net 程序集以解决此问题的 标记是什么?
  • 您将添加删除标记以删除程序集的特定命名空间
  • @Haroon 你能发布一个更完整的解决方案来解决这个问题吗?我在一台也需要 .net 4.5 的机器上的 VS2010 中遇到了相同的 IReadOnlyList 命名空间问题。我发现您的链接很有帮助,并且了解我们可以告诉 Moles 不要使用 .net Framework 4.5 程序集,但我无法准确找到如何实现它(将文件放在哪里等)。我有一个 MyClass.moles 文件,当在那里添加删除标签时它不喜欢它。我还尝试创建一个新的 mscorlib.moles 文件,但也没有帮助。您可以提供的任何信息将不胜感激。谢谢!

标签: moles


【解决方案1】:

更新的解决方案 我能够让 Pex 在安装了 .Net Framework 4.5 的 VS 2010 中运行。也许其他人已经解释说这是解决方案,但我的问题(对 Moles 和 Pex 不熟悉)是许多解释都含糊不清。感谢这些帖子的作者,因为它们让我朝着正确的方向前进:

http://feherzsolt.wordpress.com/2013/02/13/moles-and-net-4-5/

http://www.daedtech.com/using-moles-with-the-system-assembly

因此解决方案是在 Pex 创建 yourAssemblyUnderTest.moles 文件的同一级别的测试项目中创建一个新的 .moles 文件 (System.moles),并将以下内容添加到文件中。

<Moles xmlns="http://schemas.microsoft.com/moles/2010/">
    <Assembly Name="System" ReflectionOnly="true" />
</Moles>

您可能必须清理(或手动删除 obj 文件夹内容)并重建,但此解决方案对我有用。我还注意到第一次构建会报告构建错误,但错误会在后续构建中消失。

替代解决方案 我知道这不是 THE 解决方案,但它是允许 Pex 运行的(糟糕的)解决方法......而且这对于评论来说太长了。如果有人知道如何让 PEX 在具有 4.5 .Net Framework 的机器上运行,请回复。

这是我的场景。我有一台装有 .Net Framework 4.5 的机器,并且安装了 Visual Studio 2010 和 2012。我安装了 Pex (en_visual_studio_2010_pex_0.94.51023.0_power_tools_x64_598803.exe) 并且可以在针对 .Net Framework 4.0 的 VS 2010 项目中运行 Pex。我可以运行 Pex 并发现问题......但是一旦我将问题提升到单元测试,单元测试项目将无法编译,因为以下构建错误

The type or namespace name 'IReadOnlyList' does not exist in the namespace 'System.Collections.Generic' (are you missing an assembly reference?)

经过大量搜索,并了解到 Pex 或 Moles 正在用 4.0 版本替换 4.5 .Net Framework 程序集,我决定卸载 4.5,安装 4.0,然后试一试。在 4.0 上运行效果很好,我不需要定义 Mole 类型的过滤器来让它工作。然后我尝试再次升级到 4.5 框架……但遗憾的是,我最终回到了从 IReadOnlyList 命名空间问题开始的地方。

【讨论】:

  • 我放弃了 VS2012 和 Moles。 VS2012 Ultimate有Fakes作为痣2.0版本。
猜你喜欢
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 2013-03-10
  • 1970-01-01
相关资源
最近更新 更多