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