Большинство примеров, которые я вижу в модульных тестах, - это простые тесты, такие как Assert.That (5, 2 + 3), но как я могу включить модульный тест в метод, который получает информацию о пользователях и сохраняет их в базе данных. Например, у меня есть метод Register, который принимает объект User. Свойства объекта пользователя заполняются из веб-формы, а затем сохраняются в базе данных. Каковы некоторые жизнеспособные модульные тесты, которые я мог бы сделать с этим?Как бы перевести это на модульный тест?
Вот пример. Предположим, что объект User имеет некоторые обязательные поля, такие как Email, FirstName, LastName. Если бы действительный модульный тест утверждал, что электронная почта не является нулевой или пустой. То же самое относится к другим обязательным полям. Таким образом, в моем сценарии выше, будет ли это единичным тестом.
[Test]
public void EmptyEmailShouldReturnError()
{
User user = new User();
user.Email = "";
//Set other properties
//Not sure of nunit syntax here, so I will make something up.
Assert.IsNotEmpty(user.Email);
}
Ну, я знаю, что если я говорю с базой данных или использую какой-то внешний ресурс, это скорее интеграционный тест, поэтому в случае моего примера я не могу выполнить единичный тест на нем или передать null объект для регистрации является единичным тестом? Например, подпись Register - Register (Пользователь пользователя). Будет ли единичный тест чем-то вроде. NullUserPassedtoRegisterShouldReturnError, где я бы утверждал, что значение null и объект пользователя переданы. – Xaisoft
Тестирование, которое я описал в своем первом абзаце, будет действительным модульным тестом (поскольку он проверяет только один метод и ничего больше), если бы не это надоедливая база данных. Если вы хотите, чтобы модуль тестировал намеченные функции метода, а не только, как он реагирует на странные параметры (все из которых являются действительными модульными тестами - основные критерии для единичного теста - это то, что он проверяет только одно), вам нужно вывести базу данных из уравнения. Вы действительно сможете это сделать, только если вы отделили слой данных от тестируемого вами класса. – SuperNES
Посмотрите мое обновленное сообщение и посмотрите, имеет ли это смысл. – Xaisoft