Xunit有一个很好的功能:你可以用Theory属性创建一个测试并将数据放在InlineData属性中,xUnit将生成许多测试,并测试它们.
我想有这样的事情,但参数我的方法不是"简单的数据"(如string,int,double),但我的类的列表:
public static void WriteReportsToMemoryStream(
IEnumerable<MyCustomClass> listReport,
MemoryStream ms,
StreamWriter writer) { ... }
Run Code Online (Sandbox Code Playgroud) 我正在尝试对解析字符串并返回相应抽象语法树(表示为可区分联合)的解析器进行单元测试。我认为使用 Xunit.Extensions 的属性InlineData将所有测试用例堆叠在一起会非常紧凑:
[<Theory>]
[<InlineData("1 +1 ", Binary(Literal(Number(1.0)), Add, Literal(Number(1.0))))>]
...
let ``parsed string matches the expected result`` () =
Run Code Online (Sandbox Code Playgroud)
但是,编译器抱怨第二个参数不是文字(如果我理解正确的话,编译时间常量)。
有解决方法吗?如果不是,那么在将每个案例保持为单独的单元测试的同时构建解析器结果测试的最明智的方法是什么?
我有以下几种类型
type StatusCode =
| OK = 200
| NoContent = 204
| MovedTemp = 301
| MovedPerm = 302
| SeeOther = 303
| NotModified = 304
| NotFound = 404
| ServerError = 500
[<Literal>]
let NoBodyAllowedStatusCodes = [StatusCode.NoContent; StatusCode.NotModified]
Run Code Online (Sandbox Code Playgroud)
我得到一个编译时错误,说:
这不是有效的常量表达式或自定义属性值
我无法弄清楚这里有什么问题.