8. Unit‐тестирование - pipichaan/Financial-accounting GitHub Wiki
Для данной программы было проведено Unit-тестирование. Unit-тесты — это автоматизированные тесты, которые проверяют работу отдельных компонентов программы изолированно от других частей системы.
Пример кода 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);
}
}