Написание хороших юнит-тестов в этой ситуации - PullRequest
3 голосов
/ 30 ноября 2011

Если у меня есть код, подобный следующему:

    public const string UNSPECIFIED_DATATYPE = "11";         
    private string SelectedValue = "11";

    public bool Validate(object sender, EventArgs eventArgs)
    {
        return IsValid();
    }

    private bool IsValid()
    {            
        return (SelectedValue != UNSPECIFIED_DATATYPE);
    }

Подпись метода на самом деле для ASP.Net CustomValidatorControl.У меня нет возможности изменить эту реализацию.

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

В идеале, что-то вроде:

    public void Test_When_SelectedValue_IS_UnSPecified_validate_Returns_False
    {            
        Assert.IsFalse(Validate(UNSPECIFIED_DATATYPE));
    }

Очевидно, этоневозможно из-за сигнатуры метода Validate ().

Как написать чистые и содержательные модульные тесты, чтобы проверить, что общедоступный метод Validate с разными имитированными выбранными значениями?

Спасибо

Ответы [ 2 ]

2 голосов
/ 30 ноября 2011

IsValid этот метод является частным и не очень хорош для тестирования, вы можете извлечь логику проверки в отдельный класс, а затем делегировать логику проверки CustomValidatorControl в этот класс.Это поможет вам проверить всю логику в этом классе, посмотрите на следующий пример

public class SelectedValueValidator
{
    public const string UNSPECIFIED_DATATYPE = "11";


    private string selectedValue = "11";

    public string SelectedValue
    {
        get { return selectedValue; }
        set { selectedValue = value; }
    }

    public bool IsValid()
    {
        return (SelectedValue != UNSPECIFIED_DATATYPE);
    }

}

, а также тесты для этого класса

    [Test]
    public void IsValid_SelectedValueDifferent_ReturnTrue()
    {
        //Arrange
        var validator = new SelectedValueValidator { SelectedValue = "123" };
        //Act
        bool result = validator.IsValid();
        //Assert
        Assert.That(result, Is.True);
    }

    [Test]
    public void IsValid_SelectedValueIsTheSame_ReturnFalse()
    {
        //Arrange
        var validator = new SelectedValueValidator ();
        //Act
        bool result = validator.IsValid();
        //Assert
        Assert.That(result, Is.False);
    }

и метод in Validate, который вы должны написать

        public bool Validate(object sender, EventArgs eventArgs)
    {
        return validator.IsValid();
    }

SelectedValue также вы должны отобразить в класс Validator

0 голосов
/ 30 ноября 2011
  1. Установите SelectedValue на разные значения
  2. Вызов IsValid

Возможно, вам потребуется немного отражения ...

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