Существует ли основанная на спецификации инфраструктура тестирования для C # .Net 2.0? - PullRequest
4 голосов
/ 17 сентября 2008

Например, Reductio (для Java / Scala) и QuickCheck (для Haskell). Тип фреймворка, о котором я думаю, предоставит «генераторы» для встроенных типов данных и позволит программисту определять новые генераторы. Затем программист определит метод тестирования, который устанавливает какое-либо свойство, принимая в качестве параметров переменные соответствующих типов. Затем среда генерирует набор случайных данных для параметров и запускает сотни тестов этого метода.

Например, если я реализовал класс Vector и у него был метод add (), я мог бы проверить, что мое добавление коммутирует. Поэтому я бы написал что-то вроде (в псевдокоде):

boolean testAddCommutes(Vector v1, Vector v2) {
    return v1.add(v2).equals(v2.add(v1));
}

Я мог бы запустить testAddCommutes () для двух конкретных векторов, чтобы увидеть, будет ли это дополнение коммутировать. Но вместо того, чтобы писать несколько вызовов testAddCommutes, я пишу процедуру, которая генерирует произвольные векторы. Учитывая это, платформа может запускать testAddCommutes на сотнях различных входных данных.

Звонит ли это кому-нибудь?

Ответы [ 4 ]

4 голосов
/ 09 октября 2009

Есть FsCheck, порт от QuickCheck до F # и, следовательно, C #, хотя большая часть документации, кажется, для f #. Я тоже изучал идеи. см .: http://kilfour.wordpress.com/2009/08/02/testing-tool-tour-quicknet-preview/

1 голос
/ 17 октября 2009

Чтобы уточнить мое предыдущее замечание, код QN для проверки примера псевдокода будет выглядеть примерно так:

new TestRun(1, 1000)
    .AddTransition(new MetaTransition<Input<Vector, Vector>, Vector>
    {
        Name = "Vector Add ",
        Generator = DoubleVectorGenerator,
        Execute = input => input.paramOne.Add(input.paramTwo)
    }
    .RegisterProperty(
        (input, output) =>
            new QnProperty(
                "Is Communative",
                () => QnAssert.IsTrue(output == input.paramTwo.Add(input.paramOne) )
            )
        )
    )
    .Verify()
    .RethrowLastFailureifAny()
    .ReportPropertiesTested(new ConsoleReporter());

где DoubleVectorGenerator - определенный пользователем класс, предоставляющий значения типа Input .

1 голос
/ 17 сентября 2008

Возможно, я тоже не правильно понимаю, но PEX может быть полезным для вас.

0 голосов
/ 17 сентября 2008

Возможно, я вас не правильно понимаю, но проверьте это ...

http://www.ayende.com/projects/rhino-mocks.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...