![](/img/trans.png)
[英]Unit testing an AuthorizeAttribute on an ASP.NET Core MVC API controller
[英]ASP.net Core MVC testing / make controller return a string?
我目前正想为我的 ASP.net Core MVC 项目编写测试。
问题是我目前将此代码放入我的视图中,这并不适合测试。
代码片段如下:
@if (Model.MealDays != null)
{
bool boolSaltLess = false;
@foreach (var c in Model.MealDays)
{
@{
if (@c.Meal.Saltless == true)
{
boolSaltLess = true;
}
}
}
<div>
<p><b>Missing meal diets:</b></p>
@if (boolSaltLess == false)
{
<p style="color:red">A saltless meal!</p>
}
</div>
}
我最初的问题是我是否可以将此代码移动到我的控制器中,以及我需要从控制器返回什么结果才能在我的视图中显示此信息。
public ViewResult DayDetail(int id)
{
Day d = repository.Days.Where(Day => Day.ID == id).FirstOrDefault();
IEnumerable<MealDay> md = mdRepository.MealDays;
foreach (MealDay i in md)
{
i.Day = repository.Days.Where(Day => Day.ID == i.DayID).FirstOrDefault();
i.Meal = mRepository.Meals.Where(Meal => Meal.ID == i.MealID).FirstOrDefault();
}
return View(d);
}
在视图模型中包含一个附加属性以将数据传递给视图
public bool Saltless { get; set; }
将逻辑移到控制器动作中
//...
model.Saltless = model.MealDays?.Any(c => c.Meal.Saltless);
return View(model);
//...
在视图中,现在检查属性是一件简单的事情
@if (Model.MealDays != null) {
<div>
<p><b>Missing meal diets:</b></p>
@if (Model.Saltless == false)
{
<p style="color:red">A saltless meal!</p>
}
</div>
}
它允许通过对 Controller 操作的单元测试来验证逻辑
首先,逻辑是不必要的。 做就是了:
@if (!Model.MealDays.Any(x => x.Meal.Saltless))
{
<p style="color:red">A saltless meal!</p>
}
此外,测试是关于结果的,而不是逻辑或实现。 换句话说,如果当所有食物都无盐时,响应包含“无盐食物!”,则测试通过。 如果任何一餐都是无盐的,则不会。 这意味着你的任何逻辑都有效,这才是最重要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.