在我们的项目中,我们进行了大量的单元测试。它们有助于保持项目的良好测试。
除了它们之外,我们还有一组测试,它们是单元测试,但取决于某种外部资源。我们称之为外部测试。例如,他们有时可以访问网络服务。
虽然单元测试很容易运行,但有时候集成测试无法通过:例如,由于超时错误。此外,这些测试可能需要很长时间才能运行。
目前,我们保留集成/外部单元测试,以便在开发相应的功能时运行它们。
对于普通单元测试,我们使用TeamCity进行持续集成。
如何运行集成单元测试以及何时运行它们?
答案 0 :(得分:3)
我们正在使用Maven2:maven-surefire-plugin来运行单元测试(在测试阶段)和maven-failsafe-plugin用于集成测试(集成测试阶段)。
默认情况下,所有测试都在构建项目时运行,但可以使用配置文件关闭集成测试。
在许多情况下,集成测试是模块的一部分,在某些情况下,还有专用模块只进行集成测试。
其中一个团队也使用Fitnesse进行验收测试。这些测试也在专用模块中。
我们正在使用Hudson进行CI。
答案 1 :(得分:3)
在我们的项目中,我们有单独的常规/普通单元测试套件和独立的集成测试套件。这有两个原因:
我们使用TeamCity作为我们的主要持续集成服务器和Maven作为构建系统。我们使用以下算法来运行测试:
mvn clean install
我们触发集成测试执行的方式是将TeamCity的integration.tests任务配置为依赖于“main”continous.build任务,有关详细信息,请参阅此处:http://confluence.jetbrains.net/display/TCD4/Dependencies+Triggers
我们只运行集成测试(不包括单元测试):
答案 2 :(得分: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 )
为了支持这种测试,我们有许多用于各种集成测试的模拟服务器。
答案 3 :(得分:0)
我们使用 Jenkins 自动运行我们的测试。
小心单元和集成之间的差异 - 测试。谈论“整合单元测试”是一件令人困惑的事情
Maven 为区分单元测试和集成测试提供了良好的支持 - 故障安全& Surefire插件。
来自Apache Maven项目: Failsafe插件旨在运行集成测试,而Surefire插件则用于运行单元测试。 (见:http://maven.apache.org/surefire/maven-failsafe-plugin/) 您需要在pom.xml中配置这些插件
然后您只使用mvn test
- 运行单元测试或mvn verify
运行集成测试。
单位测试应定期运行f.i.每15分钟一次。 集成测试,通常需要很长时间,并且应该运行f.i.每24小时一次。
希望能帮助他人。