问题 运行 将项目升级到 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.
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。
现在,通过可传递包还原,安装脚本不再是 运行,因此您必须自己手动添加绑定重定向。
我遇到了 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.
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。
现在,通过可传递包还原,安装脚本不再是 运行,因此您必须自己手动添加绑定重定向。