在 Shims 上下文中使用 Moles 存根方法

Use of Method stubbed in Moles inside a Shims context

最近在查看一个项目的自动化测试用例时,我遇到了一段代码,是这样的。

[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()     
{ 
... 
}

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

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

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

谢谢。

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

moles-requires-tests-to-be-in

我找不到为什么要这样写,所以我用fakes汇编重写了整个测试方法。现在一切正常。