将Fakes用于以下命名空间System.Text.RegularExpressions

时间:2015-12-13 19:03:50

标签: mocking microsoft-fakes

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

如果有人能解决此问题,请提供解决方案。我想避免改变模拟和测试框架。

1 个答案:

答案 0 :(得分:1)

我让这个工作。

    [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>