我需要重复的测试方法; 1个用于单元,1个用于集成测试?

时间:2013-01-30 20:07:04

标签: c# unit-testing moq integration-testing

我对单元测试更新,似乎我发现的大部分信息都在单元测试方面。我已经很好地掌握了这一点,并计划在Moq中使用MS Test Framework,因此我不必为我的单元测试依赖项手动滚动任何模拟。

假设我有以下单元测试方法:

[TestMethod]
public void GetCustomerByIDUnitTest()
{
   //Uses Moq for dependency for getting customer to make sure 
   //ID I set up is same one returned to test in Assertion
}

我是否必须创建另一个相同的测试,而不是使用实际的实体框架和数据库调用来进行集成测试?

[TestMethod]
public void GetCustomerByIDIntegrationTest()
{
   //Uses actual repository interface for EF and DB to do integration testing
}

出于此问题的目的,请留下有关TDD或BDD的主题;我很容易确定我是否需要(2)单独的测试和组织这些测试的方式。在进行单元测试和集成测试时,这是一个要求吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

在我看来,这有点情境化。如果我正在开展一个小型的个人项目,那么不,我只是进行单元测试。

如果它是企业/企业项目,那么我倾向于进行单元和集成测试。但是,保持单元和集成测试分开。开发人员应该能够经常快速地运行单元测试。集成测试可以不那么频繁地运行,因为它们通常需要很长时间才能运行。通常我只是在提交之前运行一次集成测试,而我更频繁地运行单元测试。


作为补充说明,请让您的测试名称解释应该发生的事情。测试名称GetCustomerByIDUnitTest实际上并没有告诉我太多。更好的是:GetCustomerByID_ReturnsTheCorrectUser_WhenAValidIdIsPassed和反之GetCustomerByID_ReturnsNull_WhenNonExistantIdIsPassed

我倾向于支持What_Does_When命名约定,但这也是个人偏好。一般来说,解释越多越好。

答案 1 :(得分:1)

嗯,我希望通过提及你没有提及的事情,我不会让你失望。但在这里我的2美分。一个免责声明。我将nunitRhinoMocks一起使用,因此语法可能不同,但概念是相同的。

是的,您需要单独的测试。您可以讨论是否要将测试存储在同一测试类中,并使用[Category("integrationtest")]标记它们,以便您可以轻松运行单元测试而无需运行集成测试,反之亦然。通过你的TDD实践(哎呀,我知道你不想让我谈论:))你需要尽快完成单元测试。

从略微不同的角度来看这个;你并没有真正复制你的测试。集成测试验证功能,而单元测试则单独验证方法。所以他们很可能有完全不同的名字。只要它们对你有意义(或者如果你与团队合作开发:只要对你的团队有意义的话)。

我认为最重要的是你找到一种适合你的方式。没有对错。我认为你正在编写单元测试和集成测试是一个很大的优点。你如何组织它们取决于你。我参与的不同项目有不同的方法:

项目A:

  • 1个集成测试的测试类
  • 1个单元测试的测试类

这有助于为测试类创建有意义的名称,它们可以捕获我们正在测试的实际功能。对于单元测试,测试类与我们测试的类具有相同的名称。

项目B:

  • 在一个测试类中将集成测试与单元测试混合在一起。

这也很好,尽管我们有时确实无法找到集成测试。但是,对于你身边的重塑者来说,它有多难:)。

答案 2 :(得分:0)

据我所知,你应该为UnitTesting和IntegrationTesting提供单独的项目。 此book的建议是创建两个项目,并将其命名为ProjectName.UnitTestsProjectName.IntegrationTests。 开发人员必须分别轻松地运行每一个。

您可以找到许多有关测试here

的有趣话题和视频