我想知道一些事情,我知道为了让你的测试更容易,你应该在单元测试期间使用mock来测试你想要的组件,而不需要外部依赖.但在某些时候,你必须咬紧牙关并测试与数据库,文件,网络等交互的类.
我的主要问题是:你如何测试这些课程?
我不认为在我的CI服务器上安装数据库是一种很好的做法,但你有其他选择吗?
我是否应该使用其他CI工具创建另一个服务器,具有所有外部依赖性?
我应该像我的单元测试一样经常在我的CI上运行集成测试吗?
也许全职人员应该负责手动测试这些组件?(或负责创建测试环境并配置类和外部依赖关系之间的交互,例如编辑应用程序的配置文件)
我想知道你在现实世界中是怎么做的.
我想知道你在现实世界中做得怎么样?
在现实世界中,没有关于该做什么的简单处方,但有一个指导性的事实:你想在引入之后尽快发现错误/错误/测试失败.让它成为你的向导; 其他一切都是技术.
几种常用技巧:
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邮件列表.
有很多CI和构建过程自动化工具.这些只是他们的工具类的代表.