Programování
Unit testy
Testovaní je velmi důležitá část na kterou se často zapomíná. Eleminujeme riziko vzniku chyb, který vznikají v budoucnu při vývoji. Funguje to na principu dalšího projektu, který naše vytvořené věci testovat.
Na přidání unit testů do projektu je potřeba vytvořit separatní nový projekt s jménem MSTest Test Project (.NET Core) Do projektu je také potřeba přidat referenci na náš projekt (ten hlavní), aby testovací projekt měl odkud brát třídy a zdroje.
Pracování s unitTesty
Máme vytvořenou metodu double Divide(int num1, int num2), která dělí čísla num1:num2 a vytvoříme na ní unit test.
    
public class Calculator
{
    public static double Divide(int num1, int num2)
    {
        double result = Convert.ToDouble(num1) / Convert.ToDouble(num2);

        return result;
    }
}
    
Nyní vytvoříme třídu CalculatorTest v projektu MSTest Test Project (.NET Core) s označením [TestClass] [TestMethod]
    
// Označíme, že chceme testovat třídu
[TestClass]
public class CalculatorTest
{
    // Označíme, že chceme testovat tuto metodu
    [TestMethod]
    public void DivideTest()
    {
        //Definujeme hodnoty
        int num1 = 10; 
        int num2 = 2;

        //Definujeme jaký by měl být výsledek
        double expectedResult = 5;

        //Dostaneme vysledek
        double result = Calculator.Divide(10, 2);

        //Porovnáme
        Assert.AreEqual(expectedResult, result);
    }
}
    
Na základě výsledku nám vloží kladný nebo negativní výsledek, spouštění testu mužeme najít pod View > Test Explorer
Testování více dat
Zde budeme testovat více čísel najednou přes DataRow, která nám umožní nacpat čísla do parametrů.
    
[TestMethod]
[DataRow(10,2,5)] // 10:2 = 5
[DataRow(-30, -6, 5)] // 30:6 = 5
[DataRow(-30, 2, -15)] // -30:2 = -15
public void DivideTest(int num1, int num2, int expectedResult)
{
    //Dostaneme vysledek
    double result = Calculator.Divide(num1, num2);

    //Porovnáme
    Assert.AreEqual(expectedResult, result);
}
    
Pre-testové a Post-testové rutiny
Pokud dáme attribut [TestInitialize] metoda se spustí, vždy před daným testem
Pokud dáme attribut [TestCleanup] metoda se spustí po ukončení testu

Užitečné je to v případě, když test zanechává za sebou nějaký zbytečný soubory
    

[TestClass]
public class TestClass
{
    private int _poleProTest;

    [TestInitialize]
    public void InicializaceTestu()
    {
        // Inicializace proměnných a objektů pro každý test
        _poleProTest = 10;
    }

    [TestMethod]
    public void TestMetoda()
    {
        // Testování funkcionality s inicializovanými proměnnými
        Assert.AreEqual(10, _poleProTest);

        // ... další testovací kód ...
    }

    [TestCleanup]
    public void UkonceniTestu()
    {
        // Uvolnění zdrojů a provedení úklidu po každém testu
        _poleProTest = 0;
    }
}

    
Testování formulářů
Jedná se čistě o uživatelský interface a to nelze testovat nijak. Jediný způsob je zkoumat chování uživatelů. Takzvaně UX design = user experience
Další možný příklady s Assert
    
[TestMethod]
public void Assert_AreEqual_Numbers()
{
    // Arrange
    var expected = 10;
    var actual = 10;

    // Act
    Assert.AreEqual(expected, actual);
}

[TestMethod]
public void Assert_AreNotEqual_Numbers()
{
    // Arrange
    var expected = 10;
    var actual = 15;

    // Act
    Assert.AreNotEqual(expected, actual);
}

[TestMethod]
public void Assert_IsTrue_Boolean()
{
    // Arrange
    var isTrue = true;

    // Act
    Assert.IsTrue(isTrue);
}

[TestMethod]
public void Assert_IsFalse_Boolean()
{
    // Arrange
    var isFalse = false;

    // Act
    Assert.IsFalse(isFalse);
}

[TestMethod]
public void Assert_IsNotNull_Object()
{
    // Arrange
    var obj = new object();

    // Act
    Assert.IsNotNull(obj);
}

[TestMethod]
public void Assert_IsNull_Object()
{
    // Arrange
    object obj = null;

    // Act
    Assert.IsNull(obj);
}

[TestMethod]
public void Assert_IsInstanceOfType_Object()
{
    // Arrange
    var obj = new String("Test");

    // Act
    Assert.IsInstanceOfType(obj, typeof(string));
}

[TestMethod]
public void Assert_ThrowsException_Method()
{
    // Arrange
    void MethodThatThrowsException()
    {
        throw new Exception("Test Exception");
    }

    // Act
    Assert.ThrowsException<Exception>(MethodThatThrowsException);
}