我使用需要模擬的異步(.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
不錯。非常感謝。 –