c# - 无法使用 Microsoft.QualityTools.Testing.Fakes.Shims.ShimNotSupportedException 填充 WebException

标签 c# unit-testing moq microsoft-fakes

我正在尝试测试一些我无法控制的代码,这些代码会检查 WebException 并做出适当的 react 。我正在尝试为 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>

似乎没有帮助。难道是因为我也在使用最小起订量?

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

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

最佳答案

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

我设法通过将该 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 引用,并且我有与您完全相同的 System.fakes 文件,包括 !全名

注意:检查您的 Microsoft.VisualStudio.QualityTools.UnitTestFramework 版本并将其更新到 14.0 版本也是一个好主意> 还有。

关于c# - 无法使用 Microsoft.QualityTools.Testing.Fakes.Shims.ShimNotSupportedException 填充 WebException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37755275/

相关文章:

c# - 适用于 Windows CE 5.0 和 .NET 2.0 的蓝牙与 C#

.net - 如何使用 Moq 模拟 ISerializable 类?

javascript - Jasmine 测试超时, "Async callback was not invoked within 5000ms"altghough 在我的 Angular 项目测试中没有使用异步函数

java - 如何模拟 keystore 类并将模拟行为分配给其方法?

unit-testing - 升级到 .NET Core 3.1 后,Moq 验证未按预期工作

c# - 模拟具有两个参数的方法时出错

c# - 我对 ViewState 有疑问

c# - localSettings.Containers [容器名称]-给定的 key 不存在

C# 列表添加有效但不追加?

python - 如何在 Flask 中伪造 request.POST 和 GET 参数以进行单元测试?