我在尝试进行单元测试的方法中有与此类似的代码:
return _context.usp_get_Some_Data(someStringParam).FirstOrDefault();
存储过程调用返回类型:
ObjectResult<usp_get_Some_Data_Result>.
在我的单元测试中,我尝试做这样的事情(使用 NUnit 和 Moq):
var procResult = new ObjectResult<usp_get_Some_Data_Result>();
mockContext.Setup(m => m.usp_get_Some_Data(It.IsAny<string>()))
.Returns(procResult);
但是,我无法创建 ObjectResult 的实例(这是System.Data.Entity.Core.Objects.ObjectResult<T>
,不是旧的System.Data.Objects
一)。它没有公共无参数构造函数,但是文档 https://msdn.microsoft.com/en-us/library/mt154818(v=vs.113).aspx#M:System.Data.Entity.Core.Objects.ObjectResult%601.说它有一个受保护的。根据我的测试,他的文档似乎不正确。
我尝试过的
我尝试创建一个派生类并调用base()
在构造函数上,我也尝试过使用反射(都Activator.CreateInstance
并调用ConstructorInfo
with BindingFlags
of NonPublic
,所有这些都失败了(从我的调试看来,该类型确实有三个私有构造函数,所有这些构造函数都有 3 个或更多参数,但不幸的是,弄清楚这些参数实际需要什么似乎需要付出很大的努力) 。
我也尝试过创建一个IEnumerable<usp_get_Some_Data_Result>
并将其投射到ObjectResult<usp_get_Some_Data_Result>
,但转换失败。另外,我尝试过类似的东西
var mockObjectResult = new Mock<ObjectResult<usp_get_Some_Data_Result>>();
几乎我尝试过的所有操作都失败了,并出现有关默认构造函数不可用的类似错误。
Question
有没有办法创建一个实例ObjectResult<T>
用于单元测试,或者我可以创建任何其他可以成功转换为的类型ObjectResult<T>
?