Я новичок в TDD в asp.NET, правильно ли я пишу тесты? - PullRequest
5 голосов
/ 09 августа 2010

За последние несколько месяцев я много читал о TDD и решил заскочить и попробовать его на простом примере. Я просто не уверен, что проверяю правильные вещи на практике.Вот тесты для пользовательской аннотации данных для проверки электронных писем:

using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace MembershipTest.Tests
{
    [TestClass]
    public class CustomDataAnnotationsTest
    {
        [TestMethod]
        public void CustomDataAnnotations_Email_ReturnTrueIfNull()
        {
            // Arrange
            EmailAttribute attribute = new EmailAttribute();

            // Act
            bool result = attribute.IsValid(null);

            // Assert
            Assert.AreEqual(true, result);
        }

        [TestMethod]
        public void CustomDataAnnotations_Email_ReturnFalseIfInvalid()
        {
            // Arrange
            EmailAttribute attribute = new EmailAttribute();

            // Act
            bool result = attribute.IsValid("()[]\\;:,<>@example.com");

            // Assert
            Assert.AreEqual(false, result);
        }

        [TestMethod]
        public void CustomDataAnnotations_Email_ReturnTrueIfValid()
        {
            // Arrange
            EmailAttribute attribute = new EmailAttribute();

            // Act
            bool result = attribute.IsValid("john.smith@example.com");

            // Assert
            Assert.AreEqual(true, result);
        }
    }
}

А вот следующий код, написанный для теста:

using System;
using System.ComponentModel.DataAnnotations;
using System.Net.Mail;

public class EmailAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        //Let RequiredAttribute validate whether the value is required or not.
        if (value == null)
        {
            return true;
        }

        //Check to see if System.Net.Mail can send to the address.
        try
        {
            var i = new MailAddress(value.ToString());
        }
        catch (Exception)
        {
            return false;
        }

        return true;
    }

}

Все тесты изначально не пройдены, а затем успешно выполнены после записикод, но правильно ли написаны тесты?Слишком много или слишком мало?Я знаю, что это очень простой пример, но я хочу убедиться, что я на правильном пути, прежде чем перейти к более сложным вещам.

1 Ответ

6 голосов
/ 09 августа 2010

Я думаю, вы на правильном пути. На этом этапе я бы предложил рефакторинг в ваших тестах. Так как вы используете

EmailAttribute attribute = new EmailAttribute();

в каждом тесте. Я бы предложил создать методы TestInitialize () и TestCleanup (). TestInitialize создаст новый EmailAttribute, а TestCleanup обнулит объект. Это просто вопрос предпочтений. Как это

private EmailAttribute _attribute;

[TestInitialize]
public void TestInitialize()
{
  _attribute = new EmailAttribute
}

[TestCleanup]
public void TestCleanup()
{
  _attribute = null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...