在我们的项目中,我们有很多单元测试。他们有助于保持项目相当充分的测试。如何运行集成测试?
除了他们,我们有一套测试是单元测试,但取决于某种外部资源。我们称之为外部测试。例如,他们有时可以访问Web服务。
虽然单元测试很容易运行,但整合测试有时无法通过:例如,由于超时错误。另外,这些测试可能需要很长时间才能运行。
目前,我们保持集成/外部单元测试只是为了在开发相应功能时运行它们。
对于普通单元测试,我们使用TeamCity进行持续集成。
如何运行集成单元测试以及何时运行它们?
在我们的项目中,我们有很多单元测试。他们有助于保持项目相当充分的测试。如何运行集成测试?
除了他们,我们有一套测试是单元测试,但取决于某种外部资源。我们称之为外部测试。例如,他们有时可以访问Web服务。
虽然单元测试很容易运行,但整合测试有时无法通过:例如,由于超时错误。另外,这些测试可能需要很长时间才能运行。
目前,我们保持集成/外部单元测试只是为了在开发相应功能时运行它们。
对于普通单元测试,我们使用TeamCity进行持续集成。
如何运行集成单元测试以及何时运行它们?
在我们的项目中,我们为常规/普通单元测试和单独的套件进行了集成测试。该是两个原因:
我们使用TeamCity作为我们的主持续集成服务器和Maven作为构建系统。我们使用以下算法来运行测试:
mvn clean install
我们触发集成测试执行的方式是通过配置的TeamCity的integration.tests任务依赖于“主” continous.build任务,请查看详情:http://confluence.jetbrains.net/display/TCD4/Dependencies+Triggers
我们只运行集成测试(不包括单元测试)通过:使用
这是对我来说最接近的选择,除了我们会用模型替换一些集成测试到单元测试。 – Vladimir 2010-04-02 19:02:05
我们在一个巨大的套件中运行所有的测试。它需要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)
为了支持这项测试中,我们拥有一批对各种集成测试嘲笑式服务器。
您是否需要开发人员在签入之前运行测试? – 2010-03-31 11:51:08
这是模拟远程服务的好方法。 我认为我们不这样做,因为有时很难做模拟 - 或者它可能需要一些时间。 有时我甚至不知道远程ws是如何工作的。 第三件事是,有时测试远程服务如预期的那样正常工作会很有帮助。我们遇到了一些情况,主要服务提供商有可能通过一些外部测试发现的问题。 – Vladimir 2010-03-31 12:06:59
@Vladimir:“有时我甚至不知道遥远的ws是如何工作的”。假。你知道你的应用程序发送和接收什么。这就是你必须在模型中处理的一切。没有什么,只是足以让测试通过。 – 2010-03-31 13:05:39
我们使用Maven2:maven-surefire-plugin来运行单元测试(在测试阶段)和maven-failsafe插件进行集成测试(集成测试阶段)。
默认情况下,所有测试在项目构建时运行,但可以使用配置文件关闭集成测试。
在许多情况下,集成测试是模块的一部分,在某些情况下,也有专门的模块,只进行集成测试。
其中一个团队也使用Fitnesse进行验收测试。这些测试也在专用模块中。
我们使用Hudson进行CI。
正如本文讨论的内容,我想查看如何对集成测试进行分类。现在我可以自己添加:1.测试,检查我们的软件与远程软件按预期进行通信(如S. Lott所述,可以使用远程ws模型)。 2.检查远程服务是否按预期运行。 – Vladimir 2010-03-31 12:11:53