MsTest的测试是否会产生实际的单元测试?

时间:2010-09-17 15:31:01

标签: c# unit-testing visual-studio-2010 mstest

Visual Studio 2010为我生成了一堆单元测试,这似乎很方便,但我怀疑它们是否是实际的单元测试。例如,它生成了一个名为SaveTest的测试,它执行以下代码:

User user = new User();  //I have to create a user
user.Save(); //This saves the user to the database.
//Assertions here....

我上面的问题是,从我读过的,单元测试应该在Isolation中测试一些东西,所以通过测试Saving到数据库,这不是单元测试,或者我错了,MsTest是否错了?作为旁注,User由dbml和Save calles SubmitChanges在我的DataContext上生成。

3 个答案:

答案 0 :(得分:9)

如果您已经完成了隔离依赖项的必要工作,那么自动生成的测试只是单元测试,以便可以将带有副作用的调用路由到适当的模拟或存根依赖项以感知所需的效果。这些工具不会用于构建代码以支持单元测试;他们所能做的只是创建对各种公共接入点的呼叫。您还需要为每个测试安排依赖状态并断言您想要检查的条件。

答案 1 :(得分:2)

MSTest,AFAIK,不够聪明,不知道如何模拟它测试的行为。因此,如果您不自己模拟用户的数据库依赖关系,则不是单元测试。

像MSTest和NUnit这样的“单元测试”框架只提供运行一系列程序测试的环境。您使用[Test]属性或类似物来装饰方法,它将运行它。该测试可以是单元,集成,功能甚至接受级别,具体取决于测试所涵盖的代码范围。在我们的项目中,除了集成测试之外,我们有一个完整的组件,它涵盖了整个垂直的功能片,甚至模型客户验收测试用例。所有这些都是使用NUnit框架编写的。

您的开发环境无法阻止您在开发中出错;如果这是真的,就不需要质量保证。

答案 2 :(得分:0)

所有这些单元测试框架实际上并不局限于进行单元测试。

您可以使用这些类型执行大量不同的测试类型,包括完整的系统测试和集中的集成测试。特别是当您添加从测试代码/跑步者使用的额外框架工具时。

如果你有一个非常薄的类,它唯一的责任是与外部系统集成,那么如果你围绕它创建测试那些是集中的集成测试,最好是打到外部系统。只需确保将它们与单元测试分开,因为它们会自然变慢。

另一方面,对外部系统具有硬依赖性的类不仅仅是一个瘦的类,那么问题就在于你的代码;)。解决它,本质上你的测试不会有这个问题。

相关问题