8. Unit‐тестирование - pipichaan/Financial-accounting GitHub Wiki

Для данной программы было проведено Unit-тестирование. Unit-тесты — это автоматизированные тесты, которые проверяют работу отдельных компонентов программы изолированно от других частей системы.

image

Пример кода unit-теста:

    [TestInitialize]
    public void TestInitialize()
    {
        _mockTransaction = new Mock<Transaction>();
        _form = new TransactionDetails(_mockTransaction.Object);
    }

    [TestCleanup]
    public void TestCleanup()
    {
        _form.Dispose();
    }

   
    [TestMethod]
    public void LoadData()
    {
        // Arrange
        var testTransaction = new Transaction
        {
            Nominal = 100.50m,
            TransactionType = TransactionType.Income,
            Category = "Salary",
            Date = new DateTime(2023, 6, 15),
            Notes = "Monthly salary"
        };
        _mockTransaction.SetupGet(t => t.Nominal).Returns(testTransaction.Nominal);
        _mockTransaction.SetupGet(t => t.TransactionType).Returns(testTransaction.TransactionType);
        _mockTransaction.SetupGet(t => t.Category).Returns(testTransaction.Category);
        _mockTransaction.SetupGet(t => t.Date).Returns(testTransaction.Date);
        _mockTransaction.SetupGet(t => t.Notes).Returns(testTransaction.Notes);

        
        _form.LoadData();

        
        Assert.AreEqual("100.50", _form.nominalTxt.Text);
        Assert.AreEqual("Income", _form.transactionTypeCmb.Text);
        Assert.AreEqual("Salary", _form.categoryCmb.Text);
        Assert.AreEqual(new DateTime(2023, 6, 15), _form.datePckr.Value);
        Assert.AreEqual("Monthly salary", _form.notesTxt.Text);
    }

    [TestMethod]
    public void SaveBtn_Click()
    {
        
        _form.nominalTxt.Text = "500";
        _form.transactionTypeCmb.Text = "Доход";
        _form.datePckr.Value = new DateTime(2023, 6, 1);
        _form.notesTxt.Text = "Test income";

       
        _form.SaveBtn_Click(null, EventArgs.Empty);

        
        _mockTransaction.Verify(t => t.UpdateTransactionDetails(
            500m,
            new DateTime(2023, 6, 1),
            "Доход",
            "Test income",
            TransactionType.Income), Times.Once);
    }

    

   
    [TestMethod]
    public void DeleteBtn_Click()
    {
        
        var mockMessageBox = new Mock<IMessageBox>();
        mockMessageBox.Setup(m => m.Show(
            "Вы уверены, что хотите удалить эту транзакцию?",
            "Подтверждение удаления",
            MessageBoxButtons.OKCancel,
            MessageBoxIcon.Warning)).Returns(DialogResult.OK);
        
        _form.MessageBoxService = mockMessageBox.Object;

        
        _form.DeleteBtn_Click(null, EventArgs.Empty);

        
        _mockTransaction.Verify(t => t.DeleteTransaction(), Times.Once);
    }

   

    [TestMethod]
    public void NominalTxt_KeyPress()
    {
       
        var e = new KeyPressEventArgs('a');
        
       
        _form.NominalTxt_KeyPress(null, e);

        
        Assert.IsTrue(e.Handled);
    }
}