- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 Controller 中有一个这样的操作方法
public ActionResult Index()
{
using (NorthwindDataContext db = new NorthwindDatacontext())
{
var results = db.GetRecordSets(arg1, ....).ToList();
// use results as list
}
return View();
}
我想开始对其进行测试(是的,在它构建之后,而不是之前...但是代码是在我开始使用 TDD 之前编写的,所以...)
我发现向 Controller 添加一个这样的属性
public delegate NorthwindDatacontext ContextBuilderDelegate();
public ContextBuilderDelegate ContextBuilder { get; set; }
我可以在构造函数中添加类似这样的东西......
ContextBuilder = () => new NorthwindDatacontext();
然后我可以使用 NorthwindDatacontext 的模拟来测试设置 ContextBuilder 属性的 ActionMethod
var controller = new MyController();
var mockDataContext = new Mock<NorthwindDatacontext>();
controller.ContextBuilder = () => mockDataContext.Object;
但是...我找不到使用它的方法,因为 NorthwindDatacontext 的所有方法都使用 ISingleResult 作为 returnType,并且我找不到使用该接口(interface)创建对象的方法。我已经尝试过了
var theResult = new List<GetRecordSetsResult>();
// fill the data structure here with the provided result...
mockDataContext.Setup(c => c. GetRecordSets()).Returns(theResult as
ISingleResult<GetRecordSetsResult>);
但是它不起作用,因为转换为 ISingleResult 时 theResult 为 null。
有没有办法创建一个 ISingleResult 对象来测试这种方式,或者我在这里做的事情不正确?
提前致谢
最佳答案
ToList()
是 IEnumerable 的扩展方法,很容易模拟,因为它只有一个成员方法 - GetEnumerator()
。
如果 NorthwindDataContext 类的方法不是虚拟的,那么您在模拟 NorthwindDataContext 类时仍然可能会遇到问题...
无论如何,这就是我在沙箱中解决类似问题的方法,希望它有所帮助:
public class MyType
{
public virtual ISingleResult<int> ReturnSomeResult() { throw new NotImplementedException(); }
}
[TestMethod]
public void TestMethod1()
{
var mockMyType = new Mock<MyType>();
var mockSingleResult = new Mock<ISingleResult<int>>();
IEnumerable<int> someEnumerable = new int[] {1,2,3,4,5};
mockSingleResult.Setup(result => result.GetEnumerator()).Returns(someEnumerable.GetEnumerator());
mockMyType.Setup(myType => myType.ReturnSomeResult()).Returns(mockSingleResult.Object);
Assert.AreEqual(15, mockMyType.Object.ReturnSomeResult().ToList().Sum());
}
关于asp.net-mvc - 如何最小起订量 ISingleResult?我是不是该?或者有更好的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/882616/
谁能解释什么是 ISingleResult 以及 ISingleResult 和 IEnumerable 之间的区别。我们什么时候应该使用它?请解释这段代码。 public ISingleResult
您好,我正在使用带有存储过程的 ISingleResult。如果 Isingler 是否为空,我如何检查 C#。因为有时 SP 什么都不返回,有时返回数据。 有没有办法确定 ISingleResult
我创建了一个存储过程,并将其拖到我的 dbml 文件中,希望它创建一个返回对象集合的方法。但是它只给了我一个返回 ISingleResult 的方法。 我的存储过程创建一个表变量,用数据填充它,然后从
我的 Controller 中有一个这样的操作方法 public ActionResult Index() { using (NorthwindDataContext db = new Nor
我最近开始使用 LINQ to SQL。在我的 DMBL 设计器上,我打开服务器资源管理器并将存储的 proc 拖到设计器上。 我在设计器中打开 Method 的属性,看到它的返回类型是 AutoGe
我已经开始将一些现有的 LINQ to SQL 查询转换为使用存储过程的查询。但是,返回结果的格式不同,我想知道是否有一种巧妙的方法可以将一种格式转换为另一种格式。 因此,例如,我有一个 LINQ 查
对不起这个简单的问题。 我有一个返回 int 值的存储过程,我试图从我的 asp.net linq 调用这个 sp 到 sql 项目。 int currentRating = db.sproc_Get
我是一名优秀的程序员,十分优秀!