我对单元测试更新,似乎我发现的大部分信息都在单元测试方面。我已经很好地掌握了这一点,并计划在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)单独的测试和组织这些测试的方式。在进行单元测试和集成测试时,这是一个要求吗?
谢谢!
答案 0 :(得分:2)
在我看来,这有点情境化。如果我正在开展一个小型的个人项目,那么不,我只是进行单元测试。
如果它是企业/企业项目,那么我倾向于进行单元和集成测试。但是,保持单元和集成测试分开。开发人员应该能够经常快速地运行单元测试。集成测试可以不那么频繁地运行,因为它们通常需要很长时间才能运行。通常我只是在提交之前运行一次集成测试,而我更频繁地运行单元测试。
作为补充说明,请让您的测试名称解释应该发生的事情。测试名称GetCustomerByIDUnitTest
实际上并没有告诉我太多。更好的是:GetCustomerByID_ReturnsTheCorrectUser_WhenAValidIdIsPassed
和反之GetCustomerByID_ReturnsNull_WhenNonExistantIdIsPassed
我倾向于支持What_Does_When
命名约定,但这也是个人偏好。一般来说,解释越多越好。
答案 1 :(得分:1)
nunit
与RhinoMocks
一起使用,因此语法可能不同,但概念是相同的。
是的,您需要单独的测试。您可以讨论是否要将测试存储在同一测试类中,并使用[Category("integrationtest")]
标记它们,以便您可以轻松运行单元测试而无需运行集成测试,反之亦然。通过你的TDD实践(哎呀,我知道你不想让我谈论:))你需要尽快完成单元测试。
从略微不同的角度来看这个;你并没有真正复制你的测试。集成测试验证功能,而单元测试则单独验证方法。所以他们很可能有完全不同的名字。只要它们对你有意义(或者如果你与团队合作开发:只要对你的团队有意义的话)。
我认为最重要的是你找到一种适合你的方式。没有对错。我认为你正在编写单元测试和集成测试是一个很大的优点。你如何组织它们取决于你。我参与的不同项目有不同的方法:
项目A:
这有助于为测试类创建有意义的名称,它们可以捕获我们正在测试的实际功能。对于单元测试,测试类与我们测试的类具有相同的名称。
项目B:
这也很好,尽管我们有时确实无法找到集成测试。但是,对于你身边的重塑者来说,它有多难:)。
答案 2 :(得分:0)