【问题标题】:Use of Method stubbed in Moles inside a Shims context在 Shims 上下文中使用 Moles 中存根的方法
【发布时间】:2015-03-11 07:44:13
【问题描述】:

最近在浏览一个项目的自动化测试用例时,我遇到了一段类似这样的代码。

[TestMethod]
    public void UpdateTtWebScResearchIdt()
    {
        using (ShimsContext.Create())
        {
            // Some code
            SomeNamespace.Moles.MSubCom.StringFormatStringStringArray = (x, y) => "gLibErr";                
            //Assert
        }
    }

当我调试这个测试方法时,编译器显示如下错误

MolesInvalidOperationException.

在 Moles 方法被存根的那一行,即

SomeNamespace.Moles.MSubCom.StringFormatStringStringArray = (x, y) => "gLibErr";

详细信息显示了这一点。

“Moles 要求测试在仪表化过程中进行。 在 Visual Studio 单元测试中,将以下属性添加到您的单元测试方法中:

添加此属性

[TestMethod]        
[HostType(Moles)]      
public void Test()     
{ 
... 
}

扩展也可用于大多数单元测试框架。请参考 Moles 手册。

但是添加上述属性也不能解决我的问题。

我认为在垫片方法中使用痣是有问题的。 我需要对此提出另一种意见(或许多意见)。 如果有人能提出一个很棒的解决方案。

谢谢。

【问题讨论】:

    标签: c#-4.0 visual-studio-2012 automated-tests moles


    【解决方案1】:

    您的初始代码的唯一问题是缺少[HostType(Moles)]。接下来,您必须确保使用 Visual Studio 测试运行程序运行测试。如果您安装了其他测试运行程序,则可能是它没有加载 Moles 主机。

    moles-requires-tests-to-be-in

    【讨论】:

    • 感谢同行的回复。正如我已经提到的,添加属性不起作用。在将方法指定为 Moles 宿主后,ShimsContext.Create() 会因类似的异常而中断。
    • 你用的是什么测试运行器?
    • Visual Studio 测试运行器
    【解决方案2】:

    我找不到为什么会这样写,所以我用 fakes 程序集重写了整个测试方法。现在它工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 2017-02-13
      • 2011-08-23
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多