نحوه بررسی کنترل های نامتقارن در ASP.NET 5

در این مقاله نحوه بررسی کنترل های نامتقارن در ASP.NET 5 به همراه دستورات این کنترل ها ارائه شده است .

در NET. 4.5 مایکروسافت متدهای نامتقارن را معرفی می کند که به توسعه دهندگان کمک می کند کد های غیر همزمان شبیه کدهای معمولی بنویسند . بجای بازگرداندن متد نامتقارن ActionResult این <ActionResult> را باز می گرداند.

در اینجا متد های مختلف که به بررسی کمک می کند ارائه شده اند .XUnit به عنوان یک framework استفاده شده است. کد های کنترل های نامتقارن به این صورت هستند :

public async Task<IActionResult> Index()
{
    var employees = await _employeeRepository.FindAll();
    return View("Index", employees.ToList());
}
 
// GET: Employee/Details/5
public async Task<IActionResult> Details(System.Guid? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(404);
    }
 
 
    Employee employee = await _employeeRepository.Get(id);
    if (employee == null)
    {
        return new HttpStatusCodeResult(404);
    }
 
    return View("Details",employee);
}

_employeeRepository یک منبع کلاس می باشد که توسط سازنده با استفاده از تزریق framework در asp.net به وجود آمده است .

روش 1 : استفاده از Task.Wait و Task.Result . این اولین روش است جاییکه می توانید منتظر کار بمانید به محض اینکه تمام شود نتیجه را خواهید دید :

[Fact]
public void VerifyIndexActionReturnsIndexView()
{
    var employeeRepository = new Mock<IEmployeeRepository>();
    var employeeController = new EmployeeController(employeeRepository.Object);
    var actionResultTask = employeeController.Index();
    actionResultTask.Wait();
    var viewResult = actionResultTask.Result as ViewResult;
    Assert.NotNull(viewResult);
    Assert.Equal("Index", viewResult.ViewName);
}

اما یک مشکل استثنا در این روش وجود دارد. متد های نامتقارن از AggregateException استفاده می کنند . در XUnit ، مشکل ایجاد نمی کند ،از آنجایی  که XUnit از دستورات ()Assert.ThrowsAsync پشتیبانی می کند برخلاف خصوصیت ExpectedException در متد بررسی میباشد .

روش 2 :

استفاده از متد های تست نامتقارن ،دومین روش است مشابه کد منبع است ،نیاز به تغییر کد تست نامتقارن است . پیاده سازی به این صورت می باشد :

[Fact]
public async Task VerifyIndexActionReturnsIndexView()
{
    var employeeRepository = new Mock<IEmployeeRepository>();
    var employeeController = new EmployeeController(employeeRepository.Object);
    var actionResult = await employeeController.Index();
    var result = actionResult as ViewResult;
    Assert.NotNull(result);
    Assert.Equal("Index", result.ViewName);
}