我安装了Visual Studio 2012项目并安装了以下NuGet包:
鉴于以下设计的Logger类(Logger.fs):
namespace FUnit
type public ILoggerContext =
abstract member LogPath :string
type public LoggerContext (logPath :string) =
member val LogPath = logPath with get, set
interface ILoggerContext with
member this.LogPath = this.LogPath
type public Logger () =
member this.Log (context: ILoggerContext) value =
System.String.Format("Logged {0} to {1}.", value, context.LogPath)
以及以下单元测试:
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)
在确保我显示所有测试并构建项目之后,测试资源管理器无法识别单元测试。项目构建正确,Build,General或Test输出日志中没有错误或警告。
如果我用Fact属性替换当前的Theory和AutoData属性,则会显示测试结果。
F#测试项目是否支持AutoFixture? 任何人都可以复制这个并知道我做错了吗?
答案 0 :(得分:7)
我认为这是Xunit.Extensions
和测试运营商使用的Ploeh.Autofixture.Xunit
版本冲突的问题。
如果您使用Xunit的跑步者运行测试,那么您应该会看到一个例外,抱怨无法找到特定版本的Xunit.Extensions
。
您可以通过向测试项目app.config
添加绑定重定向来解决此问题。由于您正在使用NuGet,因此可以通过在测试项目的程序包管理器控制台中运行它来生成绑定重定向。
Add-BindingRedirect
然后,您可以在app.config
中调整生成的绑定重定向,以便更具体。
重建项目后,您应该会看到测试显示在VS Test Explorer中。