如何从列表填充ObjectResult<>;

本文关键字:lt gt ObjectResult 填充 列表 | 更新日期: 2023-09-27 18:20:44

为了测试使用存储过程的方法,创建了一个伪方法。这个方法是返回一个int列表。

像这样的。。。

    public virtual ObjectResult<Nullable<int>> available_IDs( ... )
    {
        List<int?> fakeAvailableIDList = new List<int?>();
        fakeAvailableIDList.Add(1);
        fakeAvailableIDList.Add(2);
        fakeAvailableIDList.Add(3);
        ObjectResult<Nullable<int>> result = fakeAvailableIDList.All(m => m > 0);
        return result;
    }

失败

Cannot implicitly convert type 'bool' to 'System.Data.Objects.ObjectResult<int?>'

尝试过(做过其他事情)

ObjectResult<Nullable<int>> result = fakeAvailableIDList.All(m => m > 0);

它给出

Cannot implicitly convert type 'System.Collections.Generic.List<int?>' to 'System.Data.Objects.ObjectResult<int?>'

如何获取列表<>进入ObjectResult?

如何从列表填充ObjectResult<>;

fakeAvailableIDList.All(m => m > 0);

返回布尔值,因为.All根据集合中的所有元素是否满足指定条件返回TrueFalse

因此,ObjectResult类型的变量不能设置为Bool类型的变量。

ObjectResultObjectResult<T>类型具有隐藏的构造函数,这意味着您不能随意创建实例。此外,ObjectResult<T>类型是密封的,这意味着它不能扩展。因此,如果您正在寻找一种从Enumerable创建ObjectResult的简单方法,那么您可能运气不佳。

我认为,最简单的方法是更改要测试的方法所使用的类型。因此,如果该方法具有签名:

void Foo(ObjectResult<int?> result);

更改为:

void Foo(IEnumerable<int?> result);

这将允许您创建一个可以测试该方法的伪集合,并且您仍然可以向该方法传递ObjectContext<int?>类型,因为ObjectContext<int?>扩展了IEnumerable<int?>

我意识到这已经得到了回答,但我提出的解决方案是模拟ObjectResult<T>的特定Linq扩展。

例如:

Mock.Get(PortalEntitiesMock).Setup(m => m.ExecuteSqlQuery(It.Is<String>(x => x.ToUpper().StartsWith("SELECT"))).FirstOrDefault()).Returns<string>(p=>p).Verifiable();

因此,如果不是实际的ObjectResult<T>,则可以模拟O bjectResult<T>对象上的各个项。