У меня есть следующий код:
Код: Выделить всё
public class Status
{
public Status() { }
public enum ReceivedStatus
{
NotReceived = 0,
Received = 1
}
public ReceivedStatus XReceived { get; set; }
public ReceivedStatus YReceived { get; set; }
}
public interface IHandler
{
void UpdateStatus(Action update);
}
public class Handler : IHandler
{
public void UpdateStatus(Action update)
{
update(_status);
//Some additional stuff with _status would probably happen here
}
private Status _status = new Status();
}
public class Sequencer
{
public Sequencer(IHandler handler)
{
_handler = handler;
}
public void UpdateX()
{
_handler.UpdateStatus(x => x.XReceived = Status.ReceivedStatus.Received);
}
public void UpdateY()
{
_handler.UpdateStatus(x => x.YReceived = Status.ReceivedStatus.Received);
}
IHandler _handler;
}
Мне удалось написать следующий код модульного теста, в котором я имитирую обработчик и передаю его секвенсору, вызываю метод UpdateX в секвенсоре и затем подтвердите, что метод UpdateStatus был вызван с аргументом Actoin:
Код: Выделить всё
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
//Assign
Sequencer sequencer = new Sequencer(_mockHandler);
//Act
sequencer.UpdateX();
//Assert
_mockHandler.Received().UpdateStatus(Arg.Any());
}
private readonly IHandler _mockHandler = Substitute.For();
}
Любая помощь буду очень признателен!
Подробнее здесь: https://stackoverflow.com/questions/790 ... d-argument
Мобильная версия