5

在我们的项目中,我们有很多单元测试。他们有助于保持项目相当充分的测试。如何运行集成测试?

除了他们,我们有一套测试是单元测试,但取决于某种外部资源。我们称之为外部测试。例如,他们有时可以访问Web服务。

虽然单元测试很容易运行,但整合测试有时无法通过:例如,由于超时错误。另外,这些测试可能需要很长时间才能运行。

目前,我们保持集成/外部单元测试只是为了在开发相应功能时运行它们。

对于普通单元测试,我们使用TeamCity进行持续集成。

如何运行集成单元测试以及何时运行它们?

+0

正如本文讨论的内容,我想查看如何对集成测试进行分类。现在我可以自己添加:1.测试,检查我们的软件与远程软件按预期进行通信(如S. Lott所述,可以使用远程ws模型)。 2.检查远程服务是否按预期运行。 – Vladimir 2010-03-31 12:11:53

回答

2

在我们的项目中,我们为常规/普通单元测试和单独的套件进行了集成测试。该是两个原因:

  1. 性能:集成测试是慢得多,
  2. 测试的脆弱性:集成测试环境相关条件(产生假阳性)失败更常因。

我们使用TeamCity作为我们的主持续集成服务器和Maven作为构建系统。我们使用以下算法来运行测试:

  1. 我们在Eclipse IDE中和每次提交之前运行单元测试。
  2. 我们运行单元测试后自动每个使用Maven的mvn clean install
  3. 我们上的TeamCity代理自动运行集成测试“主要”构建完成后的TeamCity代理提交。

我们触发集成测试执行的方式是通过配置的TeamCity的integration.tests任务依赖于“主” continous.build任务,请查看详情:http://confluence.jetbrains.net/display/TCD4/Dependencies+Triggers

我们只运行集成测试(不包括单元测试)通过:使用

  • 命名 “SRC /这/ JAVA” 保持一体化 测试单独的目录,
  • 排除在默认情况下此源folde r从maven-surefire-plugin配置(配置/排除元素),
  • 使用Maven配置文件调用“集成”来排除常规单元测试并包含来自“src/it/java”的测试(此配置文件通过传递-Pintegration在integration.tests任务中)。
+0

这是对我来说最接近的选择,除了我们会用模型替换一些集成测试到单元测试。 – Vladimir 2010-04-02 19:02:05

1

我们在一个巨大的套件中运行所有的测试。它需要7分钟跑步。

我们的集成测试创建了模拟服务器。他们永远不会超时 - 除非测试需要服务器超时。

所以我们有以下几种东西。 (代码示例是Python)

class SomeIntegrationTest(unittest.TestCase): 
    def setUp(self): 
     testclient.StartVendorMockServer(18000) # port number 
     self.connection = applicationLibrary.connect('localhost', 18000) 
    def test_should_do_this(self): 
     self.connection.this() 
     self.assert... 
    def tearDown(self): 
     testClient.KillVendorMockServer(18000) 

这有一些限制 - 它总是为每个测试分出客户端模拟服务器。有时候没问题,有时候开始和结束的时间太多了。

我们也有以下几种东西

class SomeIntegrationTest(unittest.TestCase): 
    def setUp(self): 
     self.connection = applicationLibrary.connect('localhost', 18000) 
    def test_should_do_this(self): 
     self.connection.this() 
     self.assert... 

if __name__ == "__main__": 
    testclient.StartVendorMockServer(18000) # port number 
    result= unittest.TextTestRunner().run() 
    testclient.KillVendorMockServer(18000) 
    system.exit(result.failures + result.errors) 

为了支持这项测试中,我们拥有一批对各种集成测试嘲笑式服务器。

+0

您是否需要开发人员在签入之前运行测试? – 2010-03-31 11:51:08

+0

这是模拟远程服务的好方法。 我认为我们不这样做,因为有时很难做模拟 - 或者它可能需要一些时间。 有时我甚至不知道远程ws是如何工作的。 第三件事是,有时测试远程服务如预期的那样正常工作会很有帮助。我们遇到了一些情况,主要服务提供商有可能通过一些外部测试发现的问题。 – Vladimir 2010-03-31 12:06:59

+0

@Vladimir:“有时我甚至不知道遥远的ws是如何工作的”。假。你知道你的应用程序发送和接收什么。这就是你必须在模型中处理的一切。没有什么,只是足以让测试通过。 – 2010-03-31 13:05:39

3

我们使用Maven2:maven-surefire-plugin来运行单元测试(在测试阶段)和maven-failsafe插件进行集成测试(集成测试阶段)。

默认情况下,所有测试在项目构建时运行,但可以使用配置文件关闭集成测试。

在许多情况下,集成测试是模块的一部分,在某些情况下,也有专门的模块,只进行集成测试。

其中一个团队也使用Fitnesse进行验收测试。这些测试也在专用模块中。

我们使用Hudson进行CI。

+0

感谢提及Fitnesse - 我以前听说过。现在只是看了演示文稿 - 来自Robert Martin。看起来不错。我会尽力考虑如何将它整合到我们的目的中!你在Fitnesse有很多验收测试吗? – Vladimir 2010-04-01 18:38:05

+0

我的团队 - 不是,另一个团队在验收测试中做了很多事情。 – lexicore 2010-04-01 19:09:01

相关问题