Я использую Moq для модульного тестирования класса. Как я могу настроить поддельный IP-процессор, чтобы установить для свойства Successful параметра CreateRequest значение true? Это вообще возможно? Я посмотрел на функцию обратного вызова, предоставляемую платформой Moq, но не уверен, что она может делать то, что мне нужно в этом сценарии.
public class CreateRequest
{
public bool Successful { get; set; }
}
public interface IProcessor()
{
public void Process(CreateRequest createRequest);
}
public class TheClassIAmUnitTesting()
{
public void SomeMethod()
{
CreateRequest createRequest = new CreateRequest();
processor.Process(createRequest);
if (createRequest.Successful)
{
// do something
}
else
{
// do somethign else
}
}
}
[TestMethod]
public void TheUnitTest()
{
Mock<IProcessor> mock = new Mock<IProcessor>
this.mock.setup(x=>x.Process()) //<= what do i do here to have the mock set the boolean Successful property on the CreateRequest parameter to true?
}
2 ответа
Воспользуйтесь обратным вызовом и получите доступ к переданному аргументу
[TestMethod]
public void TheUnitTest() {
//Arrange
Mock<IProcessor> mock = new Mock<IProcessor>();
mock.Setup(_ => _.Process(It.IsAny<CreateRequest>()))
.Callback((CreateRequest arg) => arg.Successful = true)
.Verifiable();
var subject = new TheClassIAmUnitTesting(mock.Object);
//Act
subject.SomeMethod();
//Assert
mock.VerifyAll();
}
Ссылка Быстрый запуск Moq: обратные вызовы
Вы можете попробовать это
mock.Setup(x=>x.Process(It.IsAny<CreateRequest>()))
.Callback<CreateRequest>(cr => cr.Successful = true)
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.