我有一個GenericRepository
和一個GenericMockRepository
。我正在使用async
方法。在ASP中正確返回任務<TEntity>
這裏是我的代碼
// GenericRepository - uses a DbContext context subclass with connection strings and stuff
public Task<TEntity> GetByIDAsync(object id) {
return context.FindAsync(id)
}
// GenericMockRepository - uses a List<TEntity> entities
public Task<TEntity> GetByIDAsync(object id) {
// THIS DOESN'T WORK
return new Task<TEntity>(() => {
return entities.SingleOrDefault(entity => {
var property = entity.GetType().GetProperty("ID");
if (property != null && property.GetValue(entity) == id) {
return true;
}
return false;
});
});
}
基本上,當請求會通過瀏覽器和Controller
是由框架實例化的第一個被調用。第二個會從單元測試項目
稱爲對於這兩種情況,控制器的Details()
方法是這樣的:
// inside Details()
Customer customer = await UnitOfWork.CustomerRepository.GetByIDAsync(id.GetValueOrDefault());
這裏是測試案例:
[TestMethod]
public async void CanRetrieveSingleContact() {
//Arrange
SetUp();
Customer customer = Customers.FirstOrDefault();
// Act
ViewResult result = await Controller.Details(customer.ID) as ViewResult;
// Assert
Customer model = result.ViewData.Model as Customer;
Assert.AreEqual(customer, model);
}
沒有文檔如何異步測試,所以到目前爲止:
- 如果我宣佈本次測試方法
void
,它不會測試 - 作爲任務或任務或任務運行,但從來沒有結束,也沒有給出的結果
錯誤是什麼? – 2015-02-06 01:53:25
你可以發佈你的測試代碼嗎? – 2015-02-06 01:56:39
你還創建了'Task'嗎? – 2015-02-06 02:00:40