При создании тестового класса с помощью FsUnit [‹Test›] не является допустимым атрибутом члена. Почему?

Я работаю над новым проектом F# (из которых я сделал немного), и я стремлюсь сделать это в стиле TDD. Итак, я пытаюсь ознакомиться с использованием FsUnit, так как у меня большой опыт использования NUnit в проектах C#, и это кажется довольно распространенной средой для использования.

Мой код выглядит следующим образом:

module DatabaseReaderTest

open NUnit.Framework
open FsUnit

[<TestFixture>]
type DatabaseReaderTest ()=

    [<Test>]
    member x.ResultsAreReturnedFromDatabase =
        DatabaseReader.result.GetSqlString(1) |> should equal "first"

Насколько я могу судить, это соответствует примеру на домашней странице FsUnit (http://fsunit.codeplex.com/), но компилятор говорит мне, что [<Test>] не является допустимым атрибутом для этого языкового элемента, и я предполагаю, что это означает член.

Любые советы о том, что я делаю неправильно здесь?

Спасибо!


person McMuttons    schedule 08.10.2011    source источник
comment
Вас также может заинтересовать Unquote, code.google.com/p/unquote. . Затем вы должны написать свое тестовое утверждение как test <@ DatabaseReader.result.GetSqlString(1) = "first" @> и наслаждаться простым логическим синтаксисом утверждения F# с полной проверкой статического типа компилятора и хорошими пошаговыми сообщениями об ошибках, которые уменьшают необходимость подключения отладчика для анализа причины ошибки.   -  person Stephen Swensen    schedule 08.10.2011


Ответы (2)


Вероятно, вам нужно использовать метод, а не свойство. Просто добавьте аргумент () типа unit.

person kvb    schedule 08.10.2011
comment
Это всегда мелочи. Спасибо. - person McMuttons; 08.10.2011

В качестве примечания: если вам не нужна пользовательская инициализация перед запуском тестов и если вы используете последнюю версию NUnit, вы сможете использовать модуль с let связанными функциями для своих тестов.

Это дает вам немного более легкий синтаксис. Некоторым также нравится использовать синтаксис с двойной галочкой, который позволяет написать имя теста как обычное английское предложение (что хорошо видно в программе запуска тестов):

module DatabaseReaderTest =

  [<Test>]
  let ``Results are returned from database`` () =
    DatabaseReader.result.GetSqlString(1) |> should equal "first"
person Tomas Petricek    schedule 08.10.2011
comment
@Carsten König: просто используйте объектные выражения ... Я не помню, чтобы когда-либо нуждался в Moq / Rhino Mocks. - person Mauricio Scheffer; 08.10.2011
comment
ну, время от времени вам нужно больше, чем это, но все равно спасибо (проблема в том, чтобы иметь расширенный набор вспомогательных методов расширения для Moq и заново изобретать колесо :)) - person Random Dev; 08.10.2011
comment
Да, я собирался использовать синтаксис с двойной галочкой, но на самом деле это было просто доказательство концепции для понимания FsUnit. Спасибо за подсказку по поводу облегченной версии. Объектные выражения кажутся слишком сложными, если они имитируют что-то сложное, но это немного выходит за рамки данного обсуждения. Хотя хотелось бы услышать больше об этом. Любые советы, указывающие на тщательное сравнение выражений объектов и фиктивных библиотек? - person McMuttons; 10.10.2011