我有一个 Moq 对象,我需要返回 4 个不同参数的值。我可以用 4 个不同的语句来完成此操作,但是有没有办法在单个安装语句中实现相同的目的?
var parametersMock = new Mock<IParameters>();
parametersMock.Setup(x => x.Year).Returns(2023);
parametersMock.Setup(x => x.IsFirstTime).Returns(true);
parametersMock.Setup(x => x.IsValid).Returns(true);
parametersMock.Setup(x => x.IsTest).Returns(false);
是否可以在单个模拟设置中实现相同的目标,如下所示:
parametersMock.Setup(x => x.Year, x.IsFirstTime, x.IsValid, x.IsTest).Returns(2023).Returns(true).Returns(true).Returns(false);
当您的接口表示这样的数据模型时,与逻辑繁重的“服务”类相反,通常更容易创建自己的通过可设置属性实现接口的类。
class FakeParameters : IParameters
{
public int Year {get;set;}
public bool IsFirstTime {get;set;}
public bool IsValid{get;set;}
public bool IsTest{get;set;}
}
// ...
var parameters = new FakeParameters
{
Year = 2023,
IsFirstTime = true,
IsValid = true,
IsTest = false
};
无论如何,您可能需要考虑让 IParameters 成为接口的原因:通常对于像这样的基本数据模型类,仅使用具体类会更有价值。
您可以使用
Mock.Of
通过单个命令设置多个属性
var paramsMock = Mock.Of<IParameters>(m =>
m.Year == 2023 &&
m.IsFirstTime == true &&
m.IsValid == true &&
m.IsTest == false);