从.Net 4.6.1单元测试

时间:2017-09-21 15:41:21

标签: c# mstest .net-standard vstest .net-standard-2.0

如果单元测试项目引用.Net Standard 2.0程序集,则运行使用System.IO.Compression.ZipFile.Open的.Net 4.6.1单元测试时会出现以下异常:

System.MissingMethodException: Method not found: 'System.IO.Compression.ZipArchive System.IO.Compression.ZipFile.Open(System.String, System.IO.Compression.ZipArchiveMode)'.
    at UnitTestProject.UnitTest1.TestMethod1()

单元测试项目是使用VS 2017单元测试项目(而不是.NET Core)创建的,并且引用已添加到System.IO.Compression.FileSystem和我的标准类库中:

using System.IO.Compression;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UnitTestProject
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            string zipfilename = "C:\\temp\\out.zip";
            using (ZipArchive zipArchive = ZipFile.Open(zipfilename, ZipArchiveMode.Read)) { }
        }
    }

.net标准类库只是一个没有方法的单个类:

namespace StandardClassLib
{
    public static class Zipper
    { // Class is empty.
    }
}

我在Visual Studio中使用Test Explorer并使用vstest.console.exe从命令行获得相同的错误。

请注意,此行为仅在单元测试项目中展示,控制台应用程序正常工作。

任何人都可以帮助我理解为什么这不起作用并解决此问题(如果可能的话)?

1 个答案:

答案 0 :(得分:18)

这是因为测试项目需要一些需要在构建过程中生成的其他绑定重定向。虽然项目属性对话框具有自动生成绑定重定向的选项,但这对库(经典单元测试项目)没有影响,因此您需要手动编辑.csproj文件以包含:

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

有关详细信息和说明,请参阅公告GitHub问题Issues with .NET Standard 2.0 with .NET Framework & NuGet及其相关讨论问题。