Это чистый тест BDD / MSpec? - PullRequest
       27

Это чистый тест BDD / MSpec?

3 голосов
/ 21 февраля 2012

У меня есть статический класс Cryptographic, который может Encypt и Decrypt строка. Я написал следующие спецификации для этого:

[Subject(typeof(Cryptographic))]
class When_encrypting_and_decrypting_a_string
{
    Establish context = () => { input = "teststring"; };

    Because of = () =>
    {
        output = Cryptographic.Decrypt(Cryptographic.Encrypt(input));
    };

    It should_decrypt_what_was_encrypted = () => input.ShouldEqual(output);

    static string input;
    static string output;
}

[Subject(typeof(Cryptographic))]
class When_encrypting_and_decrypting_an_empty_string
{
    Establish context = () => { input = string.Empty; };

    Because of = () =>
    {
        output = Cryptographic.Decrypt(Cryptographic.Encrypt(input));
    };

    It should_decrypt_what_was_encrypted = () => input.ShouldEqual(output);

    static string input;
    static string output;
}

[Subject(typeof(Cryptographic))]
class When_encrypting_and_decrypting_a_null_string
{
    Establish context = () => { input = null; };

    Because of = () =>
    {
        output = Cryptographic.Decrypt(Cryptographic.Encrypt(input));
    };

    It should_decrypt_what_was_encrypted = () => input.ShouldEqual(output);

    static string input;
    static string output;
}

Это чистый тест BDD? Есть что-нибудь, что можно улучшить? Несколько проблем с моей стороны:

  1. Я мог бы испытать две вещи здесь, где я на самом деле должен проверить один. У меня есть Encrypt и Decrypt в Because.
  2. В тесте много копий и вставок, все тесты отличаются только входным аргументом. Можно или нужно улучшить это, может быть с помощью какого-либо теста строки, или общего базового класса или Behaves предложение вместо? Я имею в виду удобочитаемость теперь довольно оптимально но ремонтопригодности нет. Если я оптимизирую ремонтопригодность (СУХОЙ), я может быть торгуется в удобочитаемости.

Как бы вы написали тесты / спецификации для этого?

1 Ответ

1 голос
/ 22 февраля 2012

Этот модульный тест выглядит хорошей отправной точкой.Интересно, сломался бы он, если бы я реализовал Encrypt и Decrypt так, чтобы он просто возвращал свои соответствующие input.В настоящее время нет необходимости шифровать что-либо, что заставляет меня задаться вопросом, был ли сначала написан тест или производственный код.

Как правило, если вам нужно протестировать пары ввода и вывода, я предлагаю иметьвзгляд на NUnit's TestCase et.и др.BDD как инструмент особенно имеет смысл, но не ограничивается указанием поведения system .То, что вы представили здесь, это один класс, который не взаимодействует с какой-либо другой частью системы.Хотя я понимаю, что BDD и контекст / спецификация могли бы помочь выразить ожидаемое поведение unit , иногда классические фреймворки модульного тестирования имеют больше смысла.Это особенно верно, если вам нужен тестовый запуск для кортежей ввода и вывода.

...