Nic*_*ier 22 integration continuous-integration integration-testing
我想知道一些事情,我知道为了让你的测试更容易,你应该在单元测试期间使用mock来测试你想要的组件,而不需要外部依赖.但在某些时候,你必须咬紧牙关并测试与数据库,文件,网络等交互的类.
我的主要问题是:你如何测试这些课程?
我不认为在我的CI服务器上安装数据库是一种很好的做法,但你有其他选择吗?
我是否应该使用其他CI工具创建另一个服务器,具有所有外部依赖性?
我应该像我的单元测试一样经常在我的CI上运行集成测试吗?
也许全职人员应该负责手动测试这些组件?(或负责创建测试环境并配置类和外部依赖关系之间的交互,例如编辑应用程序的配置文件)
我想知道你在现实世界中是怎么做的.
Jef*_*ick 19
我想知道你在现实世界中做得怎么样?
在现实世界中,没有关于该做什么的简单处方,但有一个指导性的事实:你想在引入之后尽快发现错误/错误/测试失败.让它成为你的向导; 其他一切都是技术.
几种常用技巧:
Tests running in parallel. This is my preference; I like to have two systems, each running their own instance of CruiseControl*(which I'm a committer for), one running the unit tests with fast feedback (< 5 minutes) while another system runs the integration tests constantly. I like this because it minimizes the delay between when a checkin happens and a system test might catch it. The downside that some people don't like is that you can end up with multiple test failures for the same checkin, both a unit test failure and an integration test failure. I don't find this a major downside in practice.
一种生命周期模型,其中系统/集成测试仅在单元测试通过后才运行.像AnthillPro*这样的工具是围绕这种模型构建的,这种方法很受欢迎.在他们的模型中,他们获取已通过单元测试的工件,将它们部署到单独的临时服务器,然后在那里运行系统/集成测试.
如果您对此主题有更多疑问,我建议您继续进行集成和测试会议(CITCON)和/或CITCON邮件列表.
我最常看到的方法是在签入时立即运行单元测试,并以固定时间间隔运行更长时间的集成测试(可能在不同的服务器上;这完全取决于您的喜好)。我还看到集成测试分为“短期运行”集成测试和“长期运行”集成测试,它们以不同的时间间隔运行(例如,“短期运行”测试每小时运行一次,而“长时间运行”测试则是每小时运行一次)。 -running”测试在夜间运行)。
任何自动化测试的真正目标都是尽可能快地向开发人员提供反馈。考虑到这一点,您应该尽可能多地运行集成测试。如果集成测试的运行长度差异很大,则应该更频繁地运行较快的集成测试,而较少运行较慢的集成测试。您运行任何一组测试的频率取决于运行所有测试所需的时间,以及测试运行对运行时间较短的测试(包括单元测试)的破坏程度。
我意识到这并不能回答你的整个问题,但我希望它能给你一些关于调度部分的想法。