Как проверить аргументы действия, которое само передается как аргумент метода?C#

Место общения программистов C#
Ответить
Anonymous
 Как проверить аргументы действия, которое само передается как аргумент метода?

Сообщение Anonymous »

Сначала я хотел бы заявить, что я новичок в StackOverflow, модульном тестировании с помощью NSubtitute и работе с действиями/делегатами в C#, поэтому заранее приношу извинения за любое неправильное использование форматирования и/или терминологии. >
У меня есть следующий код:

Код: Выделить всё

    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;
}
Я хотел бы написать модульный тест (с использованием MSTest и/или NSubstitute), который может проверить, что метод UpdateStatus был вызван для обработчика с определенным значением, установленным для передаваемого статуса. в аргументе Action.
Мне удалось написать следующий код модульного теста, в котором я имитирую обработчик и передаю его секвенсору, вызываю метод 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();
}
Это успешно подтверждает, что UpdateStatus был вызван с аргументом Action. Но на самом деле мне бы хотелось иметь возможность утверждать, что именно аргумент Action, где для XReceived было установлено значение «Received», был вызван с помощью метода UpdateStatus.
Любая помощь буду очень признателен!

Подробнее здесь: https://stackoverflow.com/questions/790 ... d-argument
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»