【问题标题】:Moles and System.Windows.FormsMoles 和 System.Windows.Forms
【发布时间】:2014-02-17 06:56:46
【问题描述】:

我是第一次尝试 Moles。当我尝试在 System.Windows.Forms 上添加 Moles 程序集时,它会生成引用 System.Collections.Generic.IReadOnlyCollection 和 IReadOnlyList 的代码,因为它们仅在 .NET Framework 4.5 中并且我的项目都是 4.0 在VS2010。我已将程序集引用设置为特定版本,但这没有帮助。有什么想法吗?

【问题讨论】:

  • 为什么要在 WinForms 中添加 Moles?通常你应该在你的单元测试项目中引用它。
  • 但是你提到的很奇怪,因为 Moles 是用于 VS 2010 在 VS 2012 中你需要使用 Fakes afaik。因此,痣需要引用 .Net Fx 4.5 类是没有意义的。
  • @Dannydust 我正在测试的代码是 BizTalk 适配器的配置 UI。它只是一个由 MMC 中的 BizTalk 框架运行的 dll,所以我让它调用 MessageBox.Show 来向用户显示任何错误。我想测试其余的功能,但要模拟这个调用。它是 BizTalk 2010,它只在 Visual Studio 2010 中受支持,所以我不能使用 Fakes。我什至没有安装 VS2012。
  • 如何用 Action 替换对 MessageBox.Show 的调用以避免这种依赖关系?调用者本身应该将 (str) => MessageBox.Show(str) 作为参数传递。这不是解决方案,而是解决方法。我经常在我的代码中这样做,所以不同的调用者可以传递不同的逻辑(显示一个消息框,写一个日志条目,...)
  • 是的,很抱歉,我无法为您提供更多帮助,我会投票支持您的问题以引起更多关注。

标签: c# .net visual-studio-2010 moles


【解决方案1】:

如果您在 Visual Studio 2012 中运行 Moles,则需要明确排除某些程序集和类型。

这对我有用:

<Assembly Name="System.Windows.Forms" ReflectionOnly="true"/>
<StubGeneration>
    <Types>
        <Clear />
        <Add FullName="Your.Type.Full.Name!" />
    </Types>
</StubGeneration>
<MoleGeneration>
    <Types>
        <Clear />
        <Add FullName="Your.Type.Full.Name!" />
    </Types>
</MoleGeneration>

【讨论】:

  • 很抱歉花了这么长时间才回复这个问题。这确实有效。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多