Задать вопрос
AndreyHudz90
@AndreyHudz90
student

Что делает код (NSubstitute, NUnit)?

Есть пример по использованию NSubstitute для стаб/мок тестирования.
В данном примере создается WFA:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BankServiceApp.UI
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        public event EventHandler<ConnectionArgs> OnValidate = delegate { };
        public bool IsValidationOk { get; set; }

        private void Validate(ConnectionArgs args)
        {
            if (OnValidate != null)
                MessageBox.Show("Validation OK");
        }

        private void btnConnect_Click(object sender, EventArgs e)
        {
            Validate(new ConnectionArgs {Login = "User", Password = "User"});
        }
    }

    public interface IConnectValidation
    {
        event EventHandler<ConnectionArgs> OnValidate;
        bool IsValidationOk { get; }
    }

    public class ConnectionArgs : EventArgs
    {
        public string Login { get; set; }
        public string Password { get; set; }
    }
}


и Unit Test Project:
using System;
using System.Runtime.Remoting.Channels;
using NUnit.Framework;
using NSubstitute;
using BankServiceApp.UI;

namespace BankServiceAppTests
{
    [TestFixture]
    public class UITests
    {
        [Test]
        public void OnValidate_WasCalled_ReturnsTrue()
        {
            // arrange
            var wasCalled = false;
            var validator = Substitute.For<IConnectValidation>();
            validator.OnValidate += (sender, args) => wasCalled = true;

            // act
            validator.OnValidate += Raise.EventWith(new ConnectionArgs());

            // assert
            Assert.NotNull(validator);
            Assert.IsTrue(wasCalled);
        }
    }
}


В ссылки которого добавляется проект BankServiceApp.UI, фреймворки: NUnit и NSubstitute.

Собственно сам код работает нормально и тест проходиться успешно. Только вот я почти не понимаю, что именно происходит.
Тут и нужна ваша помощь. Закомментируйте код максимально подробно.
Особенно интересует:
event EventHandler<ConnectionArgs> OnValidate;
public event EventHandler<ConnectionArgs> OnValidate = delegate { };

var validator = Substitute.For<IConnectValidation>();
            validator.OnValidate += (sender, args) => wasCalled = true;

            // act
            validator.OnValidate += Raise.EventWith(new ConnectionArgs());


Так же интересует общая логика в основной программе (то есть, что и зачем вообще там происходит).
  • Вопрос задан
  • 960 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Got_Oxidus
Учусь
Простой класс для тестирования.
using System;
using System.Runtime.Remoting.Channels;
using NUnit.Framework;
using NSubstitute;
using BankServiceApp.UI;

namespace BankServiceAppTests
{
    [TestFixture]
    public class UITests
    {
        [Test] //метод-тестировщик.
        public void OnValidate_WasCalled_ReturnsTrue()
        {
            // arrange 
            var wasCalled = false;
            var validator = Substitute.For<IConnectValidation>();
            validator.OnValidate += (sender, args) => wasCalled = true;

            // act
            validator.OnValidate += Raise.EventWith(new ConnectionArgs());

            // assert
            Assert.NotNull(validator); // Проверка на (validator != null)
            Assert.IsTrue(wasCalled); // Проверка на (wasCalled == true)
//если эти два условия верны, то тест пройден, если нет, то не пройден.
        }
    }
}


event EventHandler<ConnectionArgs> OnValidate;//создание события
public event EventHandler<ConnectionArgs> OnValidate = delegate { }; //Защита от NullReferenceException. Присвоив событию пустой делегат.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы