繁体   English   中英

ASP.net Core MVC 测试/使控制器返回一个字符串?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM