Есть пример по использованию
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());
Так же интересует общая логика в основной программе (то есть, что и зачем вообще там происходит).