Unit testing F#UnitTest项目中的AutoFixture未在测试资源管理器中显示单元测试

Unit testing F#UnitTest项目中的AutoFixture未在测试资源管理器中显示单元测试,unit-testing,f#,xunit.net,autofixture,Unit Testing,F#,Xunit.net,Autofixture,我已安装Visual Studio 2012项目和以下NuGet软件包: 使用Moq自动模拟的自动夹具 基于xUnit.net数据理论的自动夹具 自动夹具 最小起订量 net:扩展 xUnit.net:跑步者 xUnit.net 给定以下人为记录器类(Logger.fs): 以及以下单元测试: namespace FUnit.Test open FUnit type public Math_Add() = [<Xunit.Extensions.Theory>]

我已安装Visual Studio 2012项目和以下NuGet软件包:

  • 使用Moq自动模拟的自动夹具
  • 基于xUnit.net数据理论的自动夹具
  • 自动夹具
  • 最小起订量
  • net:扩展
  • xUnit.net:跑步者
  • xUnit.net
给定以下人为记录器类(Logger.fs):

以及以下单元测试:

namespace FUnit.Test

open FUnit

type public Math_Add() = 

    [<Xunit.Extensions.Theory>]
    [<Ploeh.AutoFixture.Xunit.AutoData>]
    member this.``Should Output Value And Path`` (path :string) =
        let context = new LoggerContext(path)
        let logger = new Logger()

        let expected = System.String.Format("Logged value to {0}.", path)
        let actual = logger.Log context "value"

        Xunit.Assert.Equal<string>(expected, actual)
namespace FUnit.Test
开玩笑
键入public Math_Add()=
[]
[]
成员this.`Should Output Value And Path`(Path:string)=
let context=new LoggerContext(路径)
让记录器=新记录器()
让expected=System.String.Format(“记录到{0}.”的值,路径)
让实际值=logger.Log上下文“值”
Assert.Equal(预期、实际)
在确保显示所有测试并构建项目后,测试资源管理器无法识别单元测试。项目正确生成,生成、常规或测试输出日志中没有错误或警告

如果我用事实属性替换当前的理论和自动数据属性,测试就会显示出来

在F#测试项目中是否支持AutoFixture?
其他人能复制这一点并知道我做错了什么吗?

我认为这是一个问题,因为
Ploeh.Autofixture.Xunit
和测试运行程序使用的
Xunit.Extensions
版本存在冲突

如果您使用Xunit的运行程序运行测试,那么您应该会看到一个异常,抱怨无法找到特定版本的
Xunit.Extensions

您可以通过将绑定重定向添加到测试项目
app.config
来解决此问题。因为您使用的是NuGet,所以您可以让它在测试项目的PackageManager控制台中运行它来生成绑定重定向

Add-BindingRedirect
然后,如果需要,可以在
app.config
中调整生成的绑定重定向,使其更加具体


重建项目后,您应该会在VS测试资源管理器中看到测试。

我认为这与AutoFixture无关。更多关于测试资源管理器(哪一个,顺便说一下?)不识别xUnit.net测试的信息。是的,评论不错。我说的是VisualStudio2012中的测试浏览器面板。我熟悉作为TFS套件一部分的测试资源管理器,但不认为它处理单元测试。如果您尝试在一个原生xUnit.net测试运行程序(GUI或命令行)中运行测试,会发生什么?FWIW,我在F#中多次成功地使用了包的精确组合(sans xUnit.net:runners),所以这绝对是可能的。谢谢你。你搞定了。
Add-BindingRedirect