gpt4 book ai didi

c# - 最小起订量单元测试通用方法

转载 作者:太空宇宙 更新时间:2023-11-03 13:25:18 26 4
gpt4 key购买 nike

我有一个从表中返回记录列表的通用方法:

public List<T> GetValidRecords<T>() where T: class, IGetListOfTables
{
try
{
return _context.Set<T>().Where(x => x.Valid == 1).ToList();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}

我有这个方法的单元测试:

[TestMethod]
public void GetValidRecords()
{
var data = new List<tableName>
{
new tableName() {Valid= 1},
new tableName() {Valid= 1}
}.AsQueryable();

var mockSet = new Mock<DbSet<tableName>>();
mockSet.As<IQueryable<tableName>>().Setup(m => m.Provider).Returns(data.Provider);
mockSet.As<IQueryable<tableName>>().Setup(m => m.Expression).Returns(data.Expression);
mockSet.As<IQueryable<tableName>>().Setup(m => m.ElementType).Returns(data.ElementType);
mockSet.As<IQueryable<tableName>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator());

var mockContext = new Mock<ALMONEntitiesNew>();
mockContext.Setup(x => x.tableName).Returns(mockSet.Object);
var database = new Database(mockContext.Object);
var numberOfRecords = database.GetValidRecords<tableName>();
Assert.AreEqual(2, numberOfRecords.Count, "Wrong number of valid records.");
}

问题是我从表中获取了实际的记录数,而不是 moqed 数。我该如何解决?

最佳答案

您需要从 GetValidRecords 方法中获取对 EF 实现的所有依赖项,尤其是 _context,否则 EF 特定实现将不断渗透到您的单元测试中。为了将 GetValidRecords 作为一个单元进行测试,您需要使其能够独立存在。如果你想按原样测试它,我建议使用集成测试,它实际上是从数据库中检索记录并断言它们返回正常 - 这不需要使用任何模拟框架,并且是一种完美的测试方式这个功能。

关于使 GetValidRecords 独立的话题,我看到 DbSet 实现了 IEnumerable,所以也许您想要的是这样的:

public static List<T> GetValidRecords<T>(this IEnumerable<T> source) where T: class, IGetListOfTables
{
if (null == source)
{
throw new ArgumentNullException("source");
}

return source.Where(x => x.Valid == 1).ToList();
}

关于c# - 最小起订量单元测试通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22614781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com