1

我的 Spring Web 项目包括:

  1. 实用类;
  2. 存储库;
  3. 服务;
  4. 控制器。

测试如下:

  1. 实用程序类的单元测试;
  2. 使用 HSQLDB 对存储库进行春季集成测试;
  3. 使用模拟存储库对服务进行单元测试;
  4. 带有模拟服务的控制器的单元测试。

也可能有测试整个项目功能的系统测试。它可以使用 Selenium 等外部工具执行,也可以使用 Spring 集成测试执行。

问题是,我应该在项目中包含这样的 Spring 集成系统测试,还是应该以某种方式将它们分开?

我发现在项目中包含系统测试有两个问题: 1. 它们需要配置调整,因为这样的测试不会与生产配置一起运行(例如,测试需要本地数据源,而不是来自 JNDI 的数据源);2.他们不是自治的,他们需要一些外部资源等等。我不能像往常一样运行它们的单元测试。

你如何组织你的系统测试?

4

1 回答 1

1

在小型项目中,我将它们放在同一个地方。在大型企业项目(例如,您可能会有效利用 Spring 的那种)中,我们通常将系统测试组织在单独的包/项目中。这有助于将它们与主代码库分开。

如果你不这样做,就会有各种各样的诱惑来重用代码中的类来“帮助”一些更应该关注系统用户体验的事情(一个用户可能是另一个系统)。如果发生这种情况,您最终会在项目域类和 UI 之间产生耦合,这将产生不可避免的影响,即需要复制许多有助于使它们在真实代码库中解耦的逻辑。

大多数情况下,系统场景中的逻辑实际上将集中在页面、屏幕、网络调用等上,因此重用主项目中的代码是一个红鲱鱼。将包裹分开以避免发生这种情况,因为一旦避免发生这种情况,就不需要将它们放在同一个地方。

但是,请确保将系统测试签入到与代码相同的版本控制中。

如果您还没有进行持续集成和测试/部署,那可能是另一个领域,一些学习将帮助您处理配置文件。不幸的是,这个问题不会因为您在单独的项目中进行测试而消失。

于 2011-02-17T14:03:59.180 回答