为以下命名空间使用 Fakes System.Text.RegularExpressions

Using Fakes for the following namespace System.Text.RegularExpressions

我喜欢使用 Microsoft Fakes 框架来拦截我无法控制的代码,例如 .net Framework 对象,例如 System.这也消除了为这些类型的对象编写包装器代码的需要。 然而,有时使用这个框架让我很沮丧。我正在使用以下命名空间 System.Text.RegularExpressions 并尝试为 Regex 对象设置垫片。但是,它不可用,原因尚不清楚。过去,我也使用过 Moles,遇到过类似的情况,有些东西没有被痣,但不确定为什么。我经常不得不写很多代码来解决这个问题,但我想尽可能避免这种情况。

如果有人有解决这个问题的方法,请提供解决方案。我想避免更改模拟和测试框架。

我成功了。

    [TestMethod]
    public void TestRegex()
    {
        using (ShimsContext.Create())
        {
            System.Text.RegularExpressions.Fakes.ShimRegex.IsMatchStringString = (s, s1) => true;
            bool result = Regex.IsMatch("TestString", "NoMatch");
            Console.WriteLine("regex result: " + result);
            Assert.IsFalse(result);
        }
    }

还需要修改 "System.fakes" 文件。我发现 Fakes 框架的大部分问题都可以通过编辑这些配置文件来解决。不确定为什么需要在这种情况下明确添加它。

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
<Assembly Name="System" Version="4.0.0.0"/>
<ShimGeneration>
    <Add FullName="System.Text.RegularExpressions.Regex"/>
</ShimGeneration>
</Fakes>