我正在尝试测试 F# 函数的返回结果是否与预期的可区分联合案例匹配。我正在使用 NUnit 来创建测试,它不喜欢将受歧视的联合类型作为TestCase
范围。以下测试用例无法编译:
[<TestCase("RF000123", Iccm.CallType.Request)>]
let ``callTypeFromCallNumber returns expected call type``
callNumber callType =
test <@ Iccm.callTypeFromCallNumber callNumber = callType @>
我预计这是 NUnit 的限制,但我不完全确定。我有一个解决这个问题的想法,我将其作为我的答案发布,但更优雅的解决方案会很好。
如何使用可区分的联合案例作为测试案例属性参数?
这不是 NUnit 的限制,而是 F# 语言(以及 C# 和 VB)的限制:您只能将常量转化为属性,但不是对象。可区分联合编译为 IL 中的对象,因此您不能将它们放入属性中。
You can不过,将枚举放入属性中,因为它们是常量(它们在运行时是数字)。
从OP中的例子来看,它看起来像CallType
Discrimed Union没有关联数据,因此可以考虑将设计更改为an enum https://msdn.microsoft.com/en-us/library/dd233216反而:
type CallType =
| Request = 0
| Incident = 1
| ChangeManagement = 2
| Unknown = 3
不过,你应该意识到,这使得CallType
一个枚举;它不再是一个受歧视的联盟。不过,它应该使您能够使用属性中的值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)