是否可以在引用类型参数上设置模拟对象的方法值?
Is it possible to have mocked object's method set value on reference type parameter?
我正在使用 Moq 对 class 进行单元测试。如何设置模拟的 IProcessor 以将 CreateRequest 参数上的 Successful 属性 设置为 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();
}
我正在使用 Moq 对 class 进行单元测试。如何设置模拟的 IProcessor 以将 CreateRequest 参数上的 Successful 属性 设置为 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();
}