TDD с MS Test - PullRequest
       24

TDD с MS Test

3 голосов
/ 02 ноября 2010

Как и все хорошие программисты, я пытаюсь понять некоторые вещи при использовании TDD с MS Test. Я следую базовому шаблону Arrange, Act, Assert, и что-то выглядит слишком сложным для моего кода Act. Я предполагаю, что в строке «Акт» должно быть только одно действие. Итак, учитывая мой пример кода ниже, я сбился с пути, выполнив сначала одно действие и ТО, проверив его состояние? Спасибо за ввод.

    [TestMethod]
    public void TheCountOfAllRecordsIsGreaterThanZero()
    {
        //Arrange
        var auditLog = new AuditMasterClass();

        //Act

        //Create a new record in a local list of objects
        auditLog.LogAction("MyPersonName", DateTime.Now, "Stuff", "MoreStuff",
                                   "Desc",
                                   "Comments", true, false,
                                   "UndoStatement");

        //Return the count of objects in the local list
        var count = auditLog.GetCommentCount();

        //Assert
        Assert.IsTrue(count > 0);
    }

Ответы [ 3 ]

5 голосов
/ 02 ноября 2010

Я не вижу никаких проблем с тем, что вы сделали. Я бы хотел включить переменную count и просто

Assert.IsTrue(auditLog.GetCommentCount() > 0);

но это не существенно отличается. Ваш тест, как написано, говорит, что вы ожидаете, когда LogAction () вызывается с определенным набором параметров, в журнале будет один или несколько комментариев. Это понятно Одна вещь, которую мне нравится делать, это утверждать, что мое действие противоречит моему утверждению перед действием, поэтому я знаю, что действие действительно является причиной этого состояния. Это, конечно, будет:

Assert.IsTrue(auditLog.GetCommentCount() == 0);

прямо перед вашим актом.

5 голосов
/ 02 ноября 2010

Тест мне подходит - я бы не стал здесь слишком догматичным, но если вам от этого станет легче, вы можете отметить линию: var count = auditLog.GetCommentCount(); как часть фазы утверждения;)

Одна вещьЯ хотел бы изменить в тесте фактическое утверждение - используйте Assert.AreNotEqual(0, count) или Assert.IsTrue(count > 0, string.Format("Count was not greater than 0, it was {0}", count)) - таким образом вы получите лучшее сообщение об ошибке в случае, если утверждение не выполнено.

1 голос
/ 02 ноября 2010

Да, в каждом тестовом случае обычно только одно действие.Вызов getter может рассматриваться как не действие и, следовательно, принадлежность к части Assert тестового примера.

В тесте TheCountOfAllRecordsIsGreaterThanZero, показанном выше, создание новой записи является частью раздела Arrange - или тест назван неправильно и может иметь значение TheCountOfAllRecordsIncreasedUponLogAction.

Я также хотел бы отметить, что одно действие на тестовый случай может означать несколько строк кода.Идея не в том, чтобы написать целый сценарий с длинной последовательностью действий.

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