许多Test类或一个Test类有很多方法?

Sam*_*Sam 11 tdd junit unit-testing

我有一个PersonDao,我正在编写单元测试.

PersonDao中约有18-20种方法 -

    getAllPersons() 
    getAllPersonsByCategory()
    getAllPersonsUnder21() etc
Run Code Online (Sandbox Code Playgroud)

我测试这个的方法是创建一个PersonDaoTest,大约有18个测试方法测试PersonDao中的每个方法

然后我创建了一个PersonDaoPaginationTest,它通过应用分页参数测试了这18种方法.

这是否反对TDD最佳实践?我被告知这会产生混淆,并且违反最佳做法,因为这是非标准的.建议将两个类合并到PersonDaoTest中.

据我所知,你的代码分解成很多类,越好,请评论.

avh*_*avh 11

事实上,您需要复制一组18个测试以测试新功能,这一事实表明您的PersonDao课程承担了多重责任.具体来说,它似乎负责查询/过滤和分页.您可能希望了解是否可以进行一些设计工作以将分页功能提取到单独的类中,然后可以单独进行测试.

但是在回答你的问题时,如果你发现你有一个你希望保持复杂的类,那么使用多个测试类作为组织大量测试的方法是完全正确的.@Gishu通过他们的设置分组测试的答案是一个很好的方法.@ Ryan通过"方面"或特征进行分组的答案是另一种好方法.


Gis*_*shu 8

在不查看代码的情况下无法给出全面的答案......除非使用与您和您的团队相关的任何内容.

我发现在大多数情况下,基于它们的设置进行分组测试效果很好.即如果5个测试需要相同的设置,它们通常很适合测试夹具.如果第6次测试需要不同的设置(或多或少)将其分解为单独的测试夹具.

这也导致测试夹具具有特征内聚性(即按功能分组的测试),试一试.我不知道有任何最佳实践表明你需要为每个生产类提供一个测试类...在实践中我发现每个生产类我有n个测试类,最好的做法是使用好名字并保持相关的测试关闭(在命名文件夹中).