【发布时间】:2016-01-06 16:57:53
【问题描述】:
我需要像这样测试简单的类:
public class SomeEntity {
public int Id { get; set; }
public string Name { get; set; }
}
我想用这个类对象的模拟来编写测试,如下所示:
var someMock = new Moq.Mock<SomeEntity>();
someMock.SetupGet(x => x.Id).Returns(12345678);
someMock.SetupGet(x => x.Name).Returns(It.IsIn(someList));
如您所知,Moq 框架需要接口或虚拟方法来创建代理对象。所以我的问题是:我怎样才能模拟我的实体类而不实现接口或用虚拟标记属性?
更新:所有这一切中最想要的结果是用多种可能的属性组合将 moq 对象替换为我的单元测试。
更新 2:看起来我不需要模拟我的实体类,我只需要使用 It.IsIn(someList) 遍历所有可能的组合:
var someEntity = new SomeEntity {
Id = 12345678,
Name = It.IsIn(someList)
}
【问题讨论】:
-
模拟行为,而不是属性...
-
请看我的更新
-
您想使用不同名称的 SomeEntity 实例运行相同的测试?即 someList? 中的所有名称
-
同意这里的其他人,没有理由模拟一个无行为的对象——在这里,似乎是一个 DTO。您需要更好地了解何时/如何使用对象模拟,或者您的代码示例还不够。
-
@DenisEfimov 你想通过在这里使用模拟来获得什么好处?没有逻辑的实体不需要特别模拟
标签: c# unit-testing moq