【问题标题】:Unit test validation of inputfields in asp.netasp.net中输入字段的单元测试验证
【发布时间】:2015-09-09 20:10:54
【问题描述】:

我正在尝试学习如何进行单元测试来实际检查一些代码,看看是否存在问题。我以前从未使用过单元测试,但看过一些教程来了解如何构建测试类。

我创建了一个带有测试框的小项目,用户可以在其中输入他的:名字、姓氏、电子邮件、电话、地址我想做一个单元测试来检查输入是否有效(不为空)

这甚至可能吗?

我的代码:

public class HomeController : Controller
{
    [HttpGet]
    public ActionResult Index()
    {
        UserModel um = new UserModel();

        return View(um);
    }

    [HttpPost]
    public ActionResult Index(UserModel um)
    {
        if (ModelState.IsValid)
        {
            Session["SelectedValues"] = um;
            return RedirectToAction("Index", "Result", new { model = um });
        }
        return View(um);
    }

}

索引视图(HomeController)

<div class="col-sm-12">

@using (Html.BeginForm())
{

<div class="row">
    <div class="col-sm-6">
        @Html.Label("First name:")<br />
        @Html.TextBoxFor(m => m.FirstName, new { @class = "textbox" })

        <br />

        @Html.Label("Last name:")<br />
        @Html.TextBoxFor(m => m.LastName, new { @class = "textbox" })

    </div>

    <div class="col-sm-6">

        @Html.Label("Email:")<br />
        @Html.TextBoxFor(m => m.Email, new { @class = "textbox" })

        <br />

        @Html.Label("Phone number:")<br />
        @Html.TextBoxFor(m => m.PhoneNumber, new { @class = "textbox" })

    </div>
</div>
<div class="row">
    <div class="col-sm-10">
        @Html.Label("Address:")<br />
        @Html.TextBoxFor(m => m.Address, new { @class = "textbox"})
    </div>

    <div class="col-sm-2">
        @Html.Label("Address number:")<br />
        @Html.TextBoxFor(m => m.AddressNr, new { @class = "textbox" })
    </div>

</div>

<br />

<div class="row">
    <div class="col-sm-12">
        <button class="button" type="submit">Submit</button>
    </div>
</div>
}
</div>

结果控制器

public class ResultController : Controller
{
    // GET: Result
    public ActionResult Index()
    {
       UserModel um = Session["SelectedValues"] as UserModel;
        return View(um);
    }
}

索引视图(ResultController)

<div>
<h4>UserModel</h4>
<hr />
<dl class="dl-horizontal">
    <dt>
        @Html.DisplayNameFor(model => model.FirstName)
    </dt>

    <dd>
        @Html.DisplayFor(model => model.FirstName)
    </dd>

    <dt>
        @Html.DisplayNameFor(model => model.LastName)
    </dt>

    <dd>
        @Html.DisplayFor(model => model.LastName)
    </dd>

    <dt>
        @Html.DisplayNameFor(model => model.PhoneNumber)
    </dt>

    <dd>
        @Html.DisplayFor(model => model.PhoneNumber)
    </dd>

    <dt>
        @Html.DisplayNameFor(model => model.Email)
    </dt>

    <dd>
        @Html.DisplayFor(model => model.Email)
    </dd>

    <dt>
        @Html.DisplayNameFor(model => model.Address)
    </dt>

    <dd>
        @Html.DisplayFor(model => model.Address)
    </dd>

    <dt>
        @Html.DisplayNameFor(model => model.AddressNr)
    </dt>

    <dd>
        @Html.DisplayFor(model => model.AddressNr)
    </dd>

</dl>
</div>

我想在添加验证之前创建测试,也可以查看单元测试的实际效果。有人可以解释或帮助我应该做什么吗?

我的测试课

namespace UnitTestApplication.Tests
{
[TestClass]
public class ValidationOfInputFieldTest
{

    [TestMethod]
    public void TestIfInputFieldsAreValidated()
    {

    }
}
}

【问题讨论】:

    标签: asp.net unit-testing


    【解决方案1】:

    MVC 控制器单元测试的目标是验证控制器的行为是否正确。在单元测试的上下文中,您永远不会真正进入视图或与视图交互。您只需验证控制器返回的模型是否正确,模型在发布到控制器后是否正确更新等。

    您想要实现的目标称为UI test,它模拟用户交互。 unit test 无法实现这一点。

    您可以通过单元测试实现的是,您可以通过提供发布到控制器的示例模型以及有效和无效模型状态的变化来测试后控制器,以验证控制器仅在 @987654324 时正确填充 Session @ 是有效的,等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      • 2023-03-14
      • 2020-11-13
      • 2017-11-09
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      相关资源
      最近更新 更多