Модульное тестирование метода SetDefaults () - PullRequest
2 голосов
/ 19 марта 2009

Я нахожусь в процессе обучения модульному тестированию. У меня есть «объект предметной области», который мало чем отличается от состояния удержания (т.е. Employee без какой-либо бизнес-логики). У него есть метод SetDefaults(), который просто заполняет его состояние разумными значениями. Простой метод.

Но когда я иду на юнит-тестирование этого метода, все, о чем я могу думать, это запустить метод, а затем проверить, что каждое поле является тем, чем оно должно быть. Как (в C#):

        [TestMethod()]
    public void SetDefaultsTest()
    {
        Employee target = new Employee();

        employee.SetDefaults();

        Assert.AreEqual(employee.Name, "New Employee");
        Assert.AreEqual(employee.Age, 30);
        // etc.
    }

Неправильно дублировать всю функциональность SetDefaults () в моем тесте. Должен ли я просто оставить этот метод без проверки? Проблема в том, что я хотел бы проверить, чтобы при добавлении новых свойств в класс они также добавлялись в метод SetDefaults ().

Ответы [ 3 ]

3 голосов
/ 19 марта 2009

Тривиальные геттеры и сеттеры иногда не имеют написанных для них модульных тестов. Если это все, что делает SetDefaults (), то, вероятно, не повредит его пропустить.

Одна вещь, которую вы хотели бы рассмотреть при тестировании, это то, что ни одно из установленных свойств экземпляра employee не является нулевым после вызова SetDefaults():

var nonNullProperties = new object[] { employee.Name, employee.Age, ... };
foreach (var property in nonNullProperties)
  Assert.IsNotNull(property);

Это имеет смысл, поскольку вы действительно просто заботитесь о том, чтобы для было установлено какое-то значение по умолчанию, и не настолько, чтобы это было специфическое значение.

2 голосов
/ 19 марта 2009

Это зависит от того, какое значение вы получите от этого теста. Не тестируйте только ради тестирования. Однако, если эти значения по умолчанию важны, чтобы быть правильными, а не изменяться, тогда продолжайте.

Во многих тестах принимается решение: "Эй, это облегчит мою работу в долгосрочной перспективе?" Изменяются ли эти значения по умолчанию все время или они постоянны? Значения по умолчанию очень сложны, или это несколько строк и цифр? Насколько важно для клиента, чтобы эти значения по умолчанию были правильными? Насколько важно для других разработчиков правильные значения по умолчанию?

Тест может сделать миллион вещей, но если он не добавляет ценности тому, кто заботится об этом, тогда не беспокойтесь об этом. Если вас попросили автоматизировать тестирование 100% всего вашего кода, возможно, чтение и обсуждение некоторых идей, представленных в следующих блогах, могут принести пользу вашей команде:

http://blog.jayfields.com/2009/02/thoughts-on-developer-testing.html http://msdn.microsoft.com/en-us/magazine/cc163665.aspx

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

1 голос
/ 19 марта 2009

Для меня это выглядит довольно разумным юнит-тестом. Вы предоставляете простой тест, который проверяет результаты вызова этого метода. Это не поможет вам с какими-либо новыми свойствами, так как существующий тест все равно пройдет. Возможно, вы могли бы использовать Reflection для перебора всех свойств объекта и проверки, что они не равны NULL?

Также SetDefaults() выглядит немного странным методом. Почему бы просто не инициализировать новый Employee для этих значений для начала? Таким образом, нет никакого риска, что другой кодер создаст Employee и забудет вызвать SetDefaults().

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