#c# #nunit
#c# #nunit
Вопрос:
Я новичок в модульном тестировании и использую Nunit, я не знаю, как передать это исключение, но есть исключение, не обработанное утверждением.
Я делаю
Assert.AreEqual(exists, 1 == (int)ExecScalar(string.Format("SELECT COUNT(*)
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{0}{1}' AND TABLE_SCHEMA ='{2}'",
(audit ? DBHelper.AuditTablePrefix : ""), tableName, schema)));
Здесь существует = true, а в моем случае другое значение равно 1 == 0, поэтому оно говорит ожидаемое значение True, но false .
Итак, что мне делать, потому что я не знаю, как мне двигаться дальше.
Заранее спасибо.
Комментарии:
1. Что вы пытаетесь протестировать? Какое допустимое условие выхода для теста?
2. Приобретите привычку использовать параметризованные запросы везде. Предотвратите атаки с использованием SQL-инъекций!
Ответ №1:
Похоже, вы пытаетесь гарантировать, что конкретный запрос возвращается 1
при подсчете таблиц, я бы посоветовал вам включить такой сложный запрос Assert.DoesNotThrow()
и использовать Assert.AreEqual()
для сравнения двух значений:
int numberOfTables = -1;
Assert.DoesNotThrow(() => numberOfTablesRaw =
(int)ExecScalar(string.Format(
"SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{0}{1}' AND TABLE_SCHEMA ='{2}'",
(audit ? DBHelper.AuditTablePrefix : ""),
tableName,
schema)));
Assert.AreEqual(1, numberOfTables);
Ответ №2:
если необходимо вызвать исключение (ожидаемая ситуация), вы можете использовать этот код:
Assert.Throws<ArgumentException>(delegate { throw new ArgumentException() } );
или добавить
[ExpectedException(typeof(ArgumentException))]
рядом с вашим объявлением [Test].
Комментарии:
1. Я бы использовал
Assert.Throws<ArgumentException>(() => classUnderTest.SomeMethod());
я не пропускаю старый синтаксис делегата.