如何打破长时间的多步集成测试?

时间:2012-03-15 12:42:08

标签: integration-testing code-organization

我有一个非常长的集成测试,模拟一个涉及与几个Java servlet的许多不同交互的顺序过程。 servlet的行为取决于请求中发布的参数的值,因此我想测试每个排列以确保我的servlet按预期运行。

目前,我的集成测试位于一个名为“testServletFunctionality()”的长函数中,如下所示:

//Configure a mock request
//Post request to servlet X
//Check database for expected changes
//Re-configure mock request
//Re-post request to servlet X
//Check database for expected changes
//Re-configure mock request
//Post request to servlet Y
//Check database for expected changes
...

并且每个configure / post / check步骤都有大约20行代码,所以函数很长。

分解或组织像这样的长时间,连续,重复的集成测试的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

集成测试(IT)的主要问题通常是设置非常昂贵。测试通常不应该依赖于彼此以及它们的执行顺序,但对于IT,如果不运行测试#1(登录),测试#2将始终失败。

悲伤。

解决方案是将这些测试视为生产代码:将长方法拆分为几个较小的方法,构建执行某些操作的辅助对象,以便在测试中执行此操作:

@Test
public void someComplexText() throws Exception {
    new LoginHelper().loginAsAdmin();
    ....
}

或将此代码移动到基础测试类中:

@Test
public void someComplexText() throws Exception {
    loginHelper().loginAsAdmin();
    ....
}