C# 用于在LinqToExcel IExcelQueryFactory上测试Linq查询的设置
使用c、Moq、MSTest、LinqToExcel 我很难找到在Linq to Excel IExcelQueryFactory上为Linq查询的响应设置模拟的最佳方法 我想我应该期望Linq查询返回delegate类型的东西,但我不太确定它应该是什么样子 有人能建议我的退货在以下最低起订量设置中应该是什么样子吗 还有,关于我测试和模仿这些Lynq方法的方法,有什么好的建议吗?我应该以不同的方式来处理这个问题吗 谢谢!我现在要去登记代表名单 测试 我正在测试的类和方法 例如,您可以使用返回虚假数据的方法C# 用于在LinqToExcel IExcelQueryFactory上测试Linq查询的设置,c#,linq,mocking,moq,linq-to-excel,C#,Linq,Mocking,Moq,Linq To Excel,使用c、Moq、MSTest、LinqToExcel 我很难找到在Linq to Excel IExcelQueryFactory上为Linq查询的响应设置模拟的最佳方法 我想我应该期望Linq查询返回delegate类型的东西,但我不太确定它应该是什么样子 有人能建议我的退货在以下最低起订量设置中应该是什么样子吗 还有,关于我测试和模仿这些Lynq方法的方法,有什么好的建议吗?我应该以不同的方式来处理这个问题吗 谢谢!我现在要去登记代表名单 测试 我正在测试的类和方法 例如,您可以使用返回虚假
mockExcelQueryFactory
.Setup(x => x.Worksheet<Thing>(It.IsAny<string>()))
.Returns(ExcelQueryableOfThing());
然后在ExcelQueryableOfThing方法中,您必须模拟IQueryProvider的CreateQueryExpression表达式方法。大概是这样的:
public class Thing
{
public string Id { get; set; }
public string Name { get; set; }
}
private ExcelQueryable<Thing> ExcelQueryableOfThing()
{
var things = new List<Thing>
{
new Thing
{
Id = "1",
Name = "Adam"
},
new Thing
{
Id = "1",
Name = "Eva"
}
}
.AsQueryable();
Mock<IQueryProvider> queryProvider = new Mock<IQueryProvider>();
queryProvider
.Setup(p => p.CreateQuery<Thing>(It.IsAny<Expression>()))
.Returns(() => things);
Expression expressionFake = Expression.Constant(new List<Thing>().AsQueryable());
return new ExcelQueryable<Thing>(queryProvider.Object, expressionFake);
}
谢谢你的回复!我得到一个无法将lambda表达式转换为类型“ExcelQueryable”,因为它不是委托类型。所以我想弄清楚我怎样才能把它交给一个代表。在我原来的帖子中更新了测试。。我相信这是对一名代表的正确选择,但我认为我需要给ExcelQueryable提供一些论据。。。正在研究我需要提供什么样的iQueryProvider和表达式。。。不得不说,这个测试看起来比它再次测试的代码要复杂得多!它起作用了,我明白了大概的意思。在它下沉之前,我得再看几眼。非常感谢你的帮助。太好了,我很高兴能帮上忙!
public class Thing
{
public string Id { get; set; }
public string Name { get; set; }
}
private ExcelQueryable<Thing> ExcelQueryableOfThing()
{
var things = new List<Thing>
{
new Thing
{
Id = "1",
Name = "Adam"
},
new Thing
{
Id = "1",
Name = "Eva"
}
}
.AsQueryable();
Mock<IQueryProvider> queryProvider = new Mock<IQueryProvider>();
queryProvider
.Setup(p => p.CreateQuery<Thing>(It.IsAny<Expression>()))
.Returns(() => things);
Expression expressionFake = Expression.Constant(new List<Thing>().AsQueryable());
return new ExcelQueryable<Thing>(queryProvider.Object, expressionFake);
}
[TestMethod]
public void GetRows_ReturnsListOfThings()
{
// Arrange
Mock<IExcelQueryFactory> mockExcelFile = new Mock<IExcelQueryFactory>();
var thingsSheet = new ThingsSheet(mockExcelFile.Object, "file", "worksheet");
mockExcelFile
.Setup(x => x.Worksheet<Thing>(It.IsAny<string>()))
.Returns(ExcelQueryableOfThing());
// Act
List<Thing> rows = thingsSheet.GetRows();
// Assert
Assert.AreEqual(2, rows.Count); // Adam and Eva
}