【问题标题】:Unit Testing in ASP.NET MVCASP.NET MVC 中的单元测试
【发布时间】:2011-05-05 16:39:19
【问题描述】:

刚刚开始使用测试框架来编写单元测试以及 TDD 方法。尽管 NUnit 是最好的选择,但之前没有任何经验的人觉得选择 XUnit 会很好。试图将我在 MVC 书籍中看到的 MS 单元测试方法转换为 XUnit 等价物,并且已经跌跌撞撞。

具体如下: 测试索引等视图集合的条目列表:

CollectionAssert.AllItemsAreInstancesOfType((ICollection)result.ViewData.Model,typeof(MyObject));  (from MVC unleashed book)

您将如何在 XUnit 中做到这一点,或者不能像这样做到这一点?

让我失望的是 XUnit 缺乏文档,我想知道 NUnit 是否是更好的选择............

此外,测试代码似乎几乎是它自己的语言。可以说所有项目都可以运行一组通用的测试是否公平?

关于 TDD..我理解这个概念,但测试本身是否与单元测试在它们包含和正在测试的内容方面相同?除了写出来的时候,不知道实际的区别是什么!

【问题讨论】:

    标签: asp.net-mvc unit-testing tdd nunit xunit


    【解决方案1】:

    我是mspec 的粉丝。看到这些questions

    有用的链接:

    MSpec installer

    它运行在 NUnit 之上。还有mvc extension methods 表示类似

    result.ShouldBeAView().and().ShouldHaveModelOfType<T>()
    

    控制器测试可能如下所示

    [Subject(typeof(JobsController))]
    public class when_viewing_imdex_page : specifications_for_jobs_controller
    {
        static ActionResult result;
    
        Establish context = 
            () => result = controller.Index();
    
        It should_return_a_view_result = 
            () => result.ShouldBeAView();
    
        It should_return_a_view_with_formviewdata = 
            () => result.ShouldBeAView().And().ShouldHaveModelOfType<IList<Job>>();
    
        It should_contain_a_list_of_jobs = 
            () => result.Model<IList<Job>>().ShouldNotBeEmpty();
    }
    

    【讨论】:

      【解决方案2】:

      我不了解 XUnit,但在 NUnit 中存在集合约束 看看这个NUnit

      对于您的示例,您可以使用此代码

      Assert.That((ICollection)result.ViewData.Model, Is.All.InstanceOf<MyObject>());
      

      【讨论】:

        【解决方案3】:

        我认为对我应该使用哪个测试框架发表评论是不公平的,因为我只使用过 NUnit,但这对我来说总是足够的。

        然而,关于你的第二点和第三点;大多数测试都非常相似,但这就是 TDD 的重点,从基础开始,继续重构,直到“不多也不少”。

        测试驱动开发和开发后测试都是单元测试的一种形式;但在 TDD 中,测试正在推动开发,确保您编写的每一行代码都有其用途并经过全面测试。

        有缺点;有时,您必须在测试之前编写代码(尤其是在开始时),这样您才能弄清楚如何测试它,因此可以公平地说您的开发将包含上述两种类型。

        TDD 和任何形式的自动化测试都绝对值得付出努力,只要您在最终测试运行时看到数百个测试在您的应用程序中通过而获得满足感。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-12
          • 1970-01-01
          • 2010-09-08
          相关资源
          最近更新 更多