Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于在LinqToExcel IExcelQueryFactory上测试Linq查询的设置_C#_Linq_Mocking_Moq_Linq To Excel - Fatal编程技术网

C# 用于在LinqToExcel IExcelQueryFactory上测试Linq查询的设置

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方法的方法,有什么好的建议吗?我应该以不同的方式来处理这个问题吗 谢谢!我现在要去登记代表名单 测试 我正在测试的类和方法 例如,您可以使用返回虚假

使用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
}