为了测试使用存储过程的方法,已经创建了一个假方法。此方法是返回一个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?>'
如何获得列表&lt;&gt;进入ObjectResult?
答案 0 :(得分:3)
该行
fakeAvailableIDList.All(m => m > 0);
返回一个布尔值,因为.All
返回True
或False
,具体取决于集合中的所有元素是否满足指定条件。
因此,ObjectResult
类型的变量无法设置为Bool
类型的变量。
ObjectResult
和ObjectResult<T>
类型具有隐藏的构造函数,这意味着您无法随意创建实例。此外,ObjectResult<T>
类型是密封的,这意味着它不能被扩展。因此,如果您正在寻找一种从ObjectResult
创建Enumerable
的简便方法,那么您可能会失败。
我认为最简单的方法是更改您尝试测试的方法所使用的类型。因此,如果该方法具有签名:
void Foo(ObjectResult<int?> result);
将其更改为:
void Foo(IEnumerable<int?> result);
这将允许您创建一个可以测试该方法的假集合,并且您仍然可以将该方法传递ObjectContext<int?>
类型,因为ObjectContext<int?>
扩展{{1 }}
答案 1 :(得分:1)
我意识到这已经得到了回答,但我提出的一个解决方案就是模仿ObjectResult<T>
的特定Linq扩展。
例如:
Mock.Get(PortalEntitiesMock).Setup(m => m.ExecuteSqlQuery(It.Is<String>(x => x.ToUpper().StartsWith("SELECT"))).FirstOrDefault()).Returns<string>(p=>p).Verifiable();
因此,如果不是实际的bjectResult<T>
,您可以在O ObjectResult<T>
对象上模拟单个项目。