你不需要模仿它就可以用它来测试.
您应该能够SomeEntity
直接在其当前状态下进行测试(并自行测试,但测试自动属性似乎是浪费精力).
如果你创建了一个实现的接口ISomeEntity
,SomeEntity
那么你就可以在任何消耗它的东西里面进行模拟.然后,您将能够测试ISomeEntity
传入的方法的行为.
正如您所说,Moq要求它是一个界面或虚拟方法.
public class SomeEntity : ISomeEntity { public int Id { get; set; } public string Name { get; set; } } public interface ISomeEntity { int Id { get; set; } string Name { get; set; } }
然后
var someMock = new Mock(); someMock.SetupGet(x => x.Id).Returns(12345678); someMock.SetupGet(x => x.Name).Returns(It.IsIn(someList)); var result = somethingelse.Act(someMock.Obect);
如果你的对象像示例中那样没有逻辑,那么就没有必要去模拟
var item = new SomeEntity(); item .Id = 12345678; item .Name = "some name"; var result = somethingelse.Act(item);
你试图通过这里使用模拟获得什么好处?如果你试图遍历列表并验证其中的每个项目,It.IsIn将不会这样做(甚至附加到模拟)它将检查所有它将分配给模拟的值是否在允许的列表中值.
这打破了每个测试格言的单个断言,但我认为这是你想要的:
var item = new SomeEntity(); foreach (var name in someList) { item .Id = 12345678; item .Name = name ; var result = somethingelse.Act(item); // Assert }