问题 运行 将项目升级到 NuGet 3.0 后的 AutoFixture xUnit 理论

Problems Running AutoFixture xUnit Theory After Upgrading Project to NuGet 3.0

我遇到了 AutoFixture and have submitted a GitHub issue for it 的问题。但是,在这里搜索了一下,似乎有几个问题与我的问题类似(但没有解决)所以我想在这里问一下以提高知名度。

问题是这样的:我最近将我的 NuGet 2.0 项目 (packages.config) 升级到了 NuGet 3.0 (project.json -- 不要与 ASP/.NET Core 的 project.json).除了一组特定的测试外,一切都取得了飞跃:

那些利用并装饰了 AutoFixture 的 AutoData (or InlineAutoData) 理论的测试。

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

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

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

但是,commenting out these lines 和重建应该会按预期成功发现所有测试。

这是一个令人头疼的问题,阻碍了我继续下去。有没有我忽略的考虑因素? FWIW,我已经将我的 %TEMP%\VisualStudioTestExplorerExtensions 清除为 suggested in the xUnit documentation 但它也没有用。

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

tl;博士

您需要在配置文件中为 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 Test Explorer 都会选择使用 AutoFixture.Xunit2 胶水库的测试。

背景

您看到的问题与 NuGet 3.0 中引入的新 transitive package restore 机制有关。

使用 project.json 格式时,捆绑在包中的 install/uninstall 脚本 不再 运行。这是因为传递包恢复 does not modify any files on disk.

来自documentation

Install/Uninstall scripts

These scripts are not supported and will be ignored. In case they exist in the package a project using transitive restore.

The main reason we removed support for this is that in the transitive model, is that there is no concept of package install time. A package is either present or not present, but there is no consistent process that occurs when a package is installed.

这些安装脚本的一项重要工作是 add all the necessary assembly binding redirects to the project's configuration file, since NuGet doesn't do it automatically, as we discovered a few years ago

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