我正在为函数编写单元测试,而函数又使用实体框架调用存储过程。存储过程返回null或整数。我试图嘲笑这一部分。我尝试了以下
mockContext.Setup(c => c.SP_DoSomething(param1, param2)).Returns(ObjectResult<int?> ???);
我想在我的模拟中返回0。我怎样才能做到这一点?
答案 0 :(得分:3)
班级ObjectResult<T>
是一个没有任何公开C,初始化/设定方法的密封班级。
您可以使用PrivateObject Class或使用反思,但这两个选项都不会提供优雅/可读的解决方案。
优雅/可读的解决方案是使用代码编织工具,如MsFakes / Typemock Isolator;在下面的示例中,我使用了MsFakes:
var queryResult = new List<int?>() { 0 };
var fakeQueryResult = new ShimObjectResult<int?>
{
GetEnumerator = () => queryResult.GetEnumerator(),
GetIListSourceListInternal = () => queryResult,
GetEnumeratorInternal = () => queryResult.GetEnumerator()
};
mockContext.Setup(c => c.SP_DoSomething(param1, param2)).Returns(fakeQueryResult);