Во-первых, позвольте мне представить тестовую настройку на F# (используя FsUnit поверх NUnit):
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()
С указанным выше изменением тест по-прежнему отображается в обозревателе тестов, но не будет выполняться. Даже если щелкнуть его правой кнопкой мыши и выбрать «Выполнить выбранные тесты», тест не будет выполнен. Об ошибках сборки не сообщается.
Я также экспериментировал с использованием DateTime.ToString()
вместо Guid.ToString()
, но это также отказывается работать:
type SimpleRecord = { A: int; B: int }
override x.ToString() = x.A.ToString() + DateTime.Now.ToString()
Почему вызов Guid.ToString()
или DateTime.ToString()
в переопределении ToString
для тестируемого типа приводит к тому, что тест не выполняется?