【问题标题】:test case writing in c#用c#编写测试用例
【发布时间】:2013-10-10 23:54:13
【问题描述】:
[HttpGet]
        [Authorize]
        public ActionResult Create() //loads the form
        {
            var categoryList = new SelectList(new[] { "Electronics", "Toys","Books","Sporting Goods"}); //defines the categories
            ViewBag.CategoryList = categoryList;
            return View();
        }

我为此写了一个测试方法..

[TestMethod]

        public void TestCreate() {

            AdvertisementController controller = new AdvertisementController();
            var categoryList = new SelectList(new[] { "Electronics", "Toys", "Books", "Sporting Goods" });
            ViewResult result = controller.Create() as ViewResult;
            Assert.AreEqual(categoryList,result.ViewBag.categoryList);

        }

但它失败了。我想知道这是什么情况。这有什么问题??

【问题讨论】:

  • 失败说明了什么?
  • 请准确描述问题所在(编译错误?异常?粘贴您看到的确切消息)。另外,将new[] 更改为new string[]。
  • 我想你大约半小时前问过类似的问题......stackoverflow.com/questions/19173200/…
  • @ShahroozJefriㇱ。 Fail 表示单元测试失败!!!!
  • 是的,测试失败了。这并不意味着代码不正确。我应该怎么做才能通过测试???

标签: c# unit-testing visual-studio-2012


【解决方案1】:

试试下面的

    [TestMethod]
    public void TestCreate() {

        // Setup
        AdvertisementController controller = new AdvertisementController();
        ViewResult result = controller.Create() as ViewResult;

        var expectedCategories = new SelectList(new[] { "Electronics", "Toys", "Books", "Sporting Goods" }).ToList();

        // Execute
        var actualCategories = result.ViewBag.categoryList.ToList();

        // Assert
        Assert.IsNotNull(result); 
        Assert.AreEqual(expectedCategories[0], actualCategories[0]);
        Assert.AreEqual(expectedCategories[1], actualCategories[2]);
        Assert.AreEqual(expectedCategories[2], actualCategories[3]);
        Assert.AreEqual(expectedCategories[3], actualCategories[4]);
        Assert.AreEqual(expectedCategories[4], actualCategories[5]);

    }

基本上,您正在验证结果是否等于某个值,并且数组中的每个项目都与预期的项目匹配。

注意:我没有在 IDE 中连接它,所以它可能有一些错误。

【讨论】:

  • 我试过了,但它给出了这个错误。错误 1 ​​无法使用 [] 将索引应用于“System.Web.Mvc.SelectList”类型的表达式
  • 啊,我错过了。您可能需要进行typeof 比较。另外,我绝对不会通过 ViewBag 传递 SelectList。请出于对一切纯洁圣洁事物的热爱,创建一个 ViewModel。
  • 我做了一个小的编辑。也许通过在 SelectList 上添加 .ToList() 会给你提供你需要的值比较......再次,未经测试......没有 IDE 可以工作。
  • 错误 1“System.Web.Mvc.SelectList”不包含“ToList”的定义,并且没有扩展方法“ToList”接受“System.Web.Mvc.SelectList”类型的第一个参数
  • 如何比较两个 SelectList 项
【解决方案2】:

不完全清楚这里发生了什么,但似乎测试是比较 SelectList 的确切实例用于 MVC 操作和单元测试。

您应该比较 SelectList 中的每个 item 是否相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    相关资源
    最近更新 更多