无法使用Microsoft.QualityTools.Testing.Fakes.Shims.ShimNotSupportedException

时间:2016-06-10 18:46:24

标签: c# unit-testing moq microsoft-fakes

我正在尝试测试我的控件之外的一些代码,它会检查WebException并做出适当的反应。我正在尝试为WebException生成一个垫片,但继续接收

  

Microsoft.QualityTools.Testing.Fakes.Shims.ShimNotSupportedException。

以下是测试的来源:

[TestMethod]
public async Task Search_WebException404Ignored()
{
    using (ShimsContext.Create())
    {
        mockApiSettings
            .Setup(p => p.ListApiUrl)
            .Returns("http://fakeUrl/?value={0}{1}");

        var exception = new ShimWebException
        {
            ResponseGet = () => new ShimHttpWebResponse {StatusCodeGet = () => HttpStatusCode.NotFound},
        };

        mockServiceProxy
            .Setup(m => m.CallServiceAsync(It.IsAny<Uri>(), RequestMethodType.GET, null))
            .ThrowsAsync(exception);

        var items = await service.Search("ListName_0", new[] {"ListValue_0", "ListValue_0"});
    }
}

我已将System.fakes文件更新为:

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/" Diagnostic="true">
  <Assembly Name="System" Version="4.0.0.0"/>
  <StubGeneration>
    <Clear/>
  </StubGeneration>
  <ShimGeneration>
    <Clear/>
    <Add FullName="System.Net.WebRequest!"/>
    <Add FullName="System.Net.HttpWebRequest!"/>
    <Add FullName="System.Net.HttpWebResponse!"/>
    <Add FullName="System.Net.WebException!"/>
  </ShimGeneration>
</Fakes>

似乎没有帮助。可能是因为我也在使用MOQ吗?

测试项目不使用其他帖子中提到的.testSettings文件。使用64位进行源和单元测试。

我正在使用Visual Studio 2015 Enterprise和Microsoft.QualityTools.Testing.Fakes 12.0.0.0。输出中没有警告显示这些项目的垫片生成。

1 个答案:

答案 0 :(得分:1)

当我的单元测试项目引用Microsoft.QualityTools.Testing.Fakes 12.0 并在VS2015中使用Shims运行某些测试时,我遇到了类似的错误。

我设法通过将该DLL文件更新为VS2015 Public Assemblies文件夹中的文件来修复此问题,在我的情况下,它是%PROGRAMFILES(x86)%\Microsoft Visual Studio 14.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.Testing.Fakes.dll

更新DLL文件后,我没有必要重新生成System.4.0.0.0.Fakes引用,并且我在!中包含FullName时,我的文件与您完全相同。 }。

注意:最好检查Microsoft.VisualStudio.QualityTools.UnitTestFramework的版本,并将其更新为 14.0 版本。