【发布时间】:2015-02-27 20:01:44
【问题描述】:
我正在尝试对解析字符串并返回相应抽象语法树(表示为可区分联合)的解析器进行单元测试。我认为使用 Xunit.Extensions 的属性 InlineData 将所有测试用例堆叠在一起会非常紧凑:
[<Theory>]
[<InlineData("1 +1 ", Binary(Literal(Number(1.0)), Add, Literal(Number(1.0))))>]
...
let ``parsed string matches the expected result`` () =
但是,编译器抱怨第二个参数不是文字(如果我理解正确,编译时间常数)。
有解决办法吗?如果不是,那么在将每个案例作为单独的单元测试的同时,构建解析器结果测试的最明智的方法是什么?
【问题讨论】:
-
不要使用属性。如果您想继续使用 Xunit,请参阅 blog.ploeh.dk/2014/03/14/exude ,否则请参阅 github.com/mausch/Fuchu
-
@MauricioScheffer 实际上我已经看过那篇博文,谢谢你提醒我。但是,R# 的测试运行程序不会在 F# 中选择 Exude 样式测试:/。它在 C# 中工作,但是当“嵌套”测试之一失败时,测试结果表现得很奇怪。
-
实际上,从头开始。它确实在 F# 中工作,我只是将测试定义为一个值,而不是一个函数。 R# 的测试运行程序将测试用例序列识别为一个单元测试,这有点烦人。 Xunit 控制台运行器没有这个问题。随时发布您的建议作为答案,我很乐意接受。
-
通常的测试运行者充满了魔法,因此会一直中断。从长远来看,最好避免它们。
标签: unit-testing f# xunit discriminated-union