0

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

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

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

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

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

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

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

4

3 回答 3

3

我是mspec的粉丝。看到这些问题

有用的网址 :

MSpec 安装程序

它运行在NUnit之上。还有一些mvc 扩展方法,例如

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();
}
于 2011-05-05T16:46:25.700 回答
0

我不了解 XUnit,但在 NUnit 中存在集合约束,请查看此NUnit

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

Assert.That((ICollection)result.ViewData.Model, Is.All.InstanceOf<MyObject>());
于 2011-05-05T16:46:27.823 回答
0

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

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

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

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

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

于 2011-05-05T16:57:10.877 回答