【发布时间】:2015-08-14 16:15:19
【问题描述】:
首先,让我介绍一下 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()
为什么在 ToString 覆盖内调用 Guid.ToString() 或 DateTime.ToString() 会导致测试未运行?
【问题讨论】:
-
这对我来说似乎是一个测试运行程序问题。我可以使用 Visual Studio 的 NUnit 测试适配器重现它,但如果我使用 nunit-console.exe 运行测试,它可以正常工作。它也适用于 TestDriven.Net。
-
我猜你说的是 ReSharper 测试运行器?
-
@MarkSeemann 你是对的!我已经在下面发布了解释和解决方案。
-
@Matthias 我正在使用带有 NUnit 测试适配器的 Visual Studio 2013 测试资源管理器。
标签: unit-testing f# nunit fsunit testcasesource