我使用需要模拟的异步(.net 4.5)方法封装类。我使用Microsoft Fakes,因此它们将成为“垫片”。下面的代码是我需要做的一个例子。它会构建,但是在运行时以及“Login”控制器方法中的“LoginAsync”方法被调用时,测试会挂起。使用Microsoft Fakes进行模拟
[TestMethod]
public async Task LoginPost_Returns() {
using (ShimsContext.Create()) {
var c = new TestController();
var user=new User();
Fakes.ShimUserManager.AllInstances.LoginAsyncString = (um, u) => new Task<IUser>(() => { return user; });
//call controller method
var result = await c.Login(model, returnUrl) as ViewResult;
var expectedViewName = "Index";
Assert.IsNotNull(result);
Assert.AreEqual(expectedViewName, result.ViewName);
}
//Controller method
public async Task<ActionResult> Login(LoginModel model, string returnUrl) {
var user = await UserManager.LoginAsync(model.UserName, model.password);
return View();
}
在错误情况下,不会明确指定委托类型比无法返回的'return'更清晰吗? – svick
不错。非常感谢。 –