Как правильно представить if-else- блок в Unit Test?

241
09 декабря 2016, 08:47

Здравствуйте.
Я хочу с помощью Unit Test проверить, или моя функция правильно работает и не знаю как заменить блок if-else?

[TestMethod]
public void Test_CreateDatabase()
{
    String database = "test_db";
    Program.CreateDatabase(@"C:\Temp\create_database.sql", database);
    String sqlConnectionString = String.Format("Server = server; 
        Database = {0}; Trusted_Connection = True;", database);
    String countTables = "SELECT COUNT(*) FROM information_schema.tables ";
    using (SqlConnection connection = new SqlConnection(sqlConnectionString))
    {
        var server = new Server(new ServerConnection(connection));
        var result = server.ConnectionContext.ExecuteScalar(countTables);
        if (result != 0)
        {
            bool temp = true;
        }
        else
        {
            bool temp = false;
        }
    }
}
Answer 1

Assert - класс - проверяет условия в модульных тестов с помощью утверждения "Истина/Ложь". Этот класс содержит набор статических методов, которые оценивают логическое условие. Если это условие принимает значение true, передает утверждения. Утверждение проверяет предположение истинности для сравниваемых условий. Если проверяемое условие не выполняется, утверждение признается ложным.

Рассмотрим несколько примеров тестов, на основании Вашего кода в вопросе с небольшими пояснениями и отступлениями.

Тест с использованием метода Assert.AreEqual (Метод проверяет, что указанные значения равны). Тест будет считаться завершенным успешно, если result будет равен 0:

[TestMethod]
public void TestMethodAssertAreEqual()
{
    var result = 0; // предположим, что мы получили это значение
    Assert.AreEqual(0, result);
}

Тест с использованием метода Assert.AreNotEqual (Метод проверяет, что указанные значения не равны). Тест будет считаться завершенным успешно, если result не будет равен 1, к примеру 0 - успешное завершение теста:

[TestMethod]
public void TestMethodAssertAreNotEqual()
{
    var result = 0; // предположим, что мы получили это значение
    Assert.AreNotEqual(1, result);
}

Также рассмотрим ситуацию, когда во время выполнения метода возникает исключение, которое является ожидаемым. К примеру передали в метод параметр, который вызывает исключение. Для этого нам поможет аттрибут ExpectedExceptionAttribute. Пример кода:

[TestMethod]
[ExpectedException(typeof(Exception))]
public void TestExpectedException()
{
    var result = server.ConnectionContext.ExecuteScalar(0); // передадим плохой параметр
}  

Просто предположим, что если в метод server.ConnectionContext.ExecuteScalar передать 0, то должно возникнуть исключение, если у теста будет аттрибут ExpectedExceptionAttribute, то тест отработает успешно.

Полезные ссылки для изучения:

  1. Assert - класс (здесь можно найти и другие виды Assert)
  2. CollectionAssert - класс (утверждения сопоставленные с коллекциями)
  3. Использование классов Assert
  4. Создание и запуск модульных тестов для существующего кода
READ ALSO
TwoWay Binding не работает через DependencyProperty

TwoWay Binding не работает через DependencyProperty

При изменении свойства через TwoWay binding не производится работа с переменной, только со свойством зависимости

244
Хочу отображать блокнот на Локскрине Windows 10

Хочу отображать блокнот на Локскрине Windows 10

Хочу, чтобы на локскрине (экране блокировки) отображался блокнотикКод обваливается на этой строчке:

212
Перебор всех control в winforms

Перебор всех control в winforms

Мне в цикле надо перебрать абсолютно все control'ы в форме (в том числе и их дети)С пом

252
След от кнопки(полоса за кнопкой)

След от кнопки(полоса за кнопкой)

Друзья, написал программу "Гонки кнопок", подскажите, что сделать, чтобы за каждой кнопкой шел след(линия):

263