首先,让我介绍一下 F# 中的测试设置(在 NUnit 之上使用 FsUnit):
type SimpleRecord = { A: int; B: int }
override x.ToString() = x.A.ToString()
[<TestFixture>]
type ``Simple Test Cases``() =
static member SimpleDataSource =
[|
[|{ A = 1; B = 2} ,3|]
|]
[<TestCaseSource("SimpleDataSource")>]
member x.``SimpleTest`` (testData: SimpleRecord * int) =
let data, expected = testData
data.A + data.B
|> should equal expected
此测试将按预期运行并通过。但是,将ToString
覆盖更改为包含调用Guid.ToString()
将阻止运行测试:
type SimpleRecord = { A: int; B: int }
override x.ToString() = x.A.ToString() + Guid.NewGuid().ToString()
通过上述更改,测试仍然出现在测试资源管理器中,但不会运行。即使右键单击它并选择 Run Selected Tests 也不会执行测试。没有报告构建错误。
我也尝试过使用DateTime.ToString()
而不是Guid.ToString()
,但这也拒绝运行:
type SimpleRecord = { A: int; B: int }
override x.ToString() = x.A.ToString() + DateTime.Now.ToString()
为什么调用Guid.ToString()
或覆盖正在测试的类型会导致测试不运行DateTime.ToString()
?ToString