单元测试-将项目升级到NuGet 3.0后运行AutoFixture xUnit Theory的问题



我遇到了AutoFixture的问题,并为此提交了一个GitHub问题。然而,在这里搜索时,似乎有一些问题与我的问题相似(但没有解决),所以我想在这里询问,以提高可见性。

问题是:我最近把我的NuGet 2.0项目(packages.config)升级到了NuGet 3.0(project.json——不要和ASP/.NETCore的project.json混淆)

使用AutoFixture的AutoData(或InlineAutoData)理论并用其进行装饰的测试。

我为这个问题制作了一个非常简单的复制品,可以在这里找到:https://github.com/Mike-EEE/Stash/tree/master/ReSharper.NuGet30

(请注意,这个名称反映了最初的印象,即问题与ReSharper有关,但它确实影响了它和本机VS单元测试运行程序。)

您可以尝试构建解决方案,应该会发现它构建得还可以,但在ReSharper的测试运行程序和本机VS测试运行程序中都找不到测试(请注意,我正在运行VS 2015 Update 3)。

然而,注释掉这些行并重新构建应该能够如预期的那样成功地发现所有测试。

这是一个领导者,也是我继续前进的障碍。有没有我忽略的考虑?FWIW,我已经按照xUnit文档中的建议清除了我的%TEMP%VisualStudioTestExplorerExtensions,但它也没有起作用。

如有任何协助,我们将不胜感激!

tl;dr

您需要在配置文件中手动添加xUnit的程序集绑定重定向:

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="xunit.core"
                                  publicKeyToken="8d05b1bb7a6fdb6c"
                                  culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-2.1.0.3179"
                                 newVersion="2.1.0.3179" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

通过这种方式,ReSharper和Visual Studio测试资源管理器都将获取使用AutoFixture.Xunit2胶库的测试。

背景

您看到的问题与NuGet 3.0中引入的新的可传递包还原机制有关。

当使用project.json格式时,捆绑在包中的安装/卸载脚本将不再运行。这是因为可传递的程序包还原不会修改磁盘上的任何文件。

来自文件:

安装/卸载脚本

这些脚本不受支持,将被忽略。如果它们存在于使用可传递恢复。

我们取消对此支持的主要原因是模型是没有包安装时间的概念。一个包裹存在或不存在,但没有一致的过程安装程序包时发生的错误。

这些安装脚本的一项重要工作是将所有必要的程序集绑定重定向添加到项目的配置文件中,因为正如我们几年前发现的那样,NuGet不会自动执行。

现在,使用可传递的包还原,安装脚本将不再运行,因此您必须自己手动添加绑定重定向。

最新更新