无法使用 Microsoft.QualityTools.Testing.Fakes.Shims.ShimNotSupportedException 填充 WebException
Unable to shim WebException with Microsoft.QualityTools.Testing.Fakes.Shims.ShimNotSupportedException
我正在尝试测试一些我无法控制的代码,这些代码会检查 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>
似乎没有帮助。难道是因为我也在使用最小起订量?
测试项目没有使用其他帖子中提到的 .testSettings
文件。使用 64 位进行源代码和单元测试。
我正在使用 Visual Studio 2015 Enterprise 和 Microsoft.QualityTools.Testing.Fakes 12.0.0.0。这些项目的垫片生成的输出中没有显示警告。
当我的单元测试项目在 VS2015 中引用 Microsoft.QualityTools.Testing.Fakes
12.0 和 运行 一些带有 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 引用,并且我有与您完全相同的 System.fakes 文件,包括 !
在 FullName
.
注意: 检查您的 Microsoft.VisualStudio.QualityTools.UnitTestFramework
版本并将其更新到版本 14.0 也是一个好主意还有。
我正在尝试测试一些我无法控制的代码,这些代码会检查 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>
似乎没有帮助。难道是因为我也在使用最小起订量?
测试项目没有使用其他帖子中提到的 .testSettings
文件。使用 64 位进行源代码和单元测试。
我正在使用 Visual Studio 2015 Enterprise 和 Microsoft.QualityTools.Testing.Fakes 12.0.0.0。这些项目的垫片生成的输出中没有显示警告。
当我的单元测试项目在 VS2015 中引用 Microsoft.QualityTools.Testing.Fakes
12.0 和 运行 一些带有 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 引用,并且我有与您完全相同的 System.fakes 文件,包括 !
在 FullName
.
注意: 检查您的 Microsoft.VisualStudio.QualityTools.UnitTestFramework
版本并将其更新到版本 14.0 也是一个好主意还有。