Я использую Moq для модульного тестирования класса. Как настроить имитируемый IProcessor, чтобы установить для свойства 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?
}
Вы можете попробовать это
mock.Setup(x=>x.Process(It.IsAny<CreateRequest>()))
.Callback<CreateRequest>(cr => cr.Successful = true)
Используйте обратный вызов и получите доступ к переданному аргументу
[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();
}