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

Mik*_*EEE 3 unit-testing xunit.net autofixture vs-unit-testing-framework nuget

我遇到了AutoFixture的问题,并为它提交了GitHub问题.但是,在这里进行一些搜索似乎有一些类似于我的问题的问题(但是没有解决)所以我想在这里询问是否具有更高的可见性.

问题是:我最近将我的NuGet 2.0项目(packages.config)升级到NuGet 3.0(project.json - 不要与ASP/.NET Core的project.json混淆).除了一组特定的测试外,所有东西都跳了起来:

那些使用AutoFixture的AutoData(或InlineAutoData)理论并进行修饰的测试.

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

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

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

但是,注释掉这些行并重建应该成功发现所有测试.

这是一个头脑风暴,并且阻止我继续.我有一个考虑因素吗?FWIW,我已清空了我的%TEMP%\VisualStudioTestExplorerExtensions作为的xUnit的文档中建议,也没有工作,要么.

任何帮助将不胜感激!

Enr*_*lio 5

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>
Run Code Online (Sandbox Code Playgroud)

这样,ReSharper和Visual Studio Test Explorer都会选择使用AutoFixture.Xunit2胶水库的测试.

背景

您看到的问题与NuGet 3.0中引入的新的传递包恢复机制有关.

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

文档:

安装/卸载脚本

这些脚本不受支持,将被忽略.如果它们在包中存在使用传递恢复的项目.

我们删除对此的支持的主要原因是在传递模型中,没有包安装时间的概念.包存在或不存在,但安装包时不会发生一致的过程.

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

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

  • 真棒!这就是诀窍,@ enrico-campidoglio.很高兴我现在发布在这里.:) (2认同)