2011-06-13 50 views
5

所以说我做TDD和我写这样一个测试:TDD测试结构问题

public void testDeposit() 
{ 
    Bank b = new Bank(); 
    b.deposit(100); 
    AssertEquals(100, b.balance); 
} 

那我走了,使测试通过,移动到下一个。说我连续几次这样做,并获得存款,提款和摊销都工作。

然后说我想写一个测试,测试某人创建一个帐户,并做一切的组合。这不是技术上的集成测试,而不是单元测试?如果是,这是否适合TDD,或者TDD是否应该只包含单元测试。

主要是我问,因为如果这个测试中断了,最有可能其中一个测试应该中断,如果他们不这样做,我可能只是没有测试适当的场景。那么当涉及到TDD时,我应该在与单元测试相同的域中进行集成测试,还是应该将这些测试写入别的其他类/文件并分别运行?

+0

皮肤的另一种方式是...... TDD =>单元测试=>一次一个对象的行为。 ATDD =>场景测试=>一次一个用户场景。 – Gishu 2011-06-14 05:12:25

回答

4

我认为高水平的测试当然可以作为TDD工作流程的一部分。例如,测试“outside in”可能是定义新功能的一种非常有效的方法。从新功能的一些UI级别验收测试开始,为需要提供该功能的组件编写集成测试,并编写单元测试以推动每个组件的实现。

我认为你应该清楚你的测试类型之间的区别,而不是将它们混合在一起,但将它们全部作为你的TDD过程的一部分是合理的。

+0

然而,这样做很有意义,但是,您是否会采取将它们保留在同一个测试文件中的方法,并将它们按区域分隔(以.net形式)或者是否为单元创建单独的文件夹(甚至是项目) /整合/ UI测试? – slandau 2011-06-13 20:55:53

+0

我更喜欢测试或规范目录的rails规范,其中包含每种类型测试的子目录,而每个类别的测试又包含每个类或测试方面的文件。例如。 'specs/models/foo'或'tests/integration/bar'。 – Jonah 2011-06-13 21:02:14

+0

有道理。谢啦。 – slandau 2011-06-13 21:05:22

2

集成测试和单元测试之间的界限可能有点模糊;在进行TDD时,测试“升级”到集成级别是值得的,只是为了得到功能的确认,但在TDD期间进行“全面的”集成测试(注意全面的引用)肯定是过分的。

基本上,“判断呼叫”有一个重要方面在进行;您的经验应该是一个很好的指导,以便在TDD模式下停止添加测试的适当级别。

+0

所以基本上就是这样,我在这里测试了一个足够广泛的场景,让我们稍后进一步讨论,并着重于在TDD sorta事物中添加更多功能? – slandau 2011-06-13 20:41:16

+0

@slandau:是的,就是这样;关键是不要陷入TDD过程中过分严格测试的细节之中;请记住,这是一个首要的发展过程。请记住,没有代码,即使是TDD代码,也没有缺陷;这是代码质量和生产力之间的平衡。 – 2011-06-13 20:57:04