【发布时间】:2018-01-22 19:25:55
【问题描述】:
想象一下我有这门课:
public class MyClass
{
public string Id { get; set; }
public string Name { get; set; }
public IList<MyOtherClass> MyOtherClassList { get; set; }
}
public IList<MyClass> GetAll()
{
var options = new FindOptions<MyClass>
{
Projection = Builders<MyClass>.Projection
.Exclude(m => m.MyOtherClassList)
};
return MyClassRepository.GetAll(options)
}
这将是测试:
[Fact]
public void GetAll_Success()
{
//Arrange
List<MyClass> expected = ... ;
var mockMyClassRepository = new Mock<IMyClassRepository>();
mockMyClassRepository.Setup(m => m.GetAll(It.IsAny<FindOptions<MyClass>>())).Returns(expected);
var myClassService = new MyClassService(mockMyClassRepository);
//Act
var result = myClassService.GetAll();
//Assert
Assert.Equal(expected, result);
mockMyClassRepository.Verify(m => m.GetAll(It.IsAny<FindOptions<MyClass>>()), Times.Once);
}
我想避免对 FindOptions 使用 It.IsAny 并确保 findOptions 不包括 MyOtherClassList 属性,但我不确定如何比较 FindOptions 类。
有什么建议吗?
【问题讨论】:
-
您是否真的要使用模拟而不是测试数据库对 DAL 进行单元测试?
-
@DannyVarod 这是一种非常常见的方法,仅供参考
-
好吧,我正在采用这种方法,但如果您可以分享任何文章以提供有关为什么使用测试数据库更好的更多信息,那将非常有帮助。
-
实际上我在这里测试的是服务层,而不是 DAL。
-
@DannyVarod 我没说这是个好方法;)
标签: c# unit-testing moq mongodb-.net-driver