如果存储过程,我如何使mockContext.Setup返回?

时间:2016-03-07 10:07:01

标签: c# entity-framework unit-testing stored-procedures moq

我正在为函数编写单元测试,而函数又使用实体框架调用存储过程。存储过程返回null或整数。我试图嘲笑这一部分。我尝试了以下

mockContext.Setup(c => c.SP_DoSomething(param1, param2)).Returns(ObjectResult<int?> ???);

我想在我的模拟中返回0。我怎样才能做到这一点?

1 个答案:

答案 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);