我目前正在编写一个Java程序,该程序是与另一台服务器的接口。大多数功能(接近> 90%)在服务器上执行某些操作。当前,我只是在编写一些简单的类,这些类在服务器上运行某些操作,然后自己检查一下,或者在测试中添加一些方法以读取书面信息。
当前,我正在自己的计算机上进行开发,并且具有在VM上本地运行的服务器版本。
我不想在每次构建时都持续运行测试,因为我也不想不断修改连接的服务器。我不确定进行测试的最佳方法。我有运行每个构建的JUnit测试(基于不与外部交互的简单函数)。我似乎看不到在JUnit中设置方法来编写不必在每次构建时都运行的测试(也许当它们的功能发生变化时?)。
或者,任何人都可以向我指出如何最好地处理我的测试的正确方向。
谢谢!
答案 0 :(得分:0)
我不想在每次构建时都持续运行测试,因为我不想不断修改连接到的服务器
这应该为您发出警报。运行测试可以为您提供有关是否损坏东西的反馈。不运行它们意味着您是盲目的。这并不意味着一切都很好。
有几种方法,具体取决于您对服务器代码的访问权限。
完全访问权限
如果您自己编写服务器,或者可以访问代码,则可以为服务器创建测试工具包-服务器的修改版本,该版本完全在内存中运行,并允许您控制服务器响应,因此您可以模拟不同的场景。
这种测试工具包是通过将服务器的逻辑部分与其周围环境分开,然后对其进行模拟或创建它们的内存版本(例如数据库,队列,文件系统等)而创建的。这样可以使服务器运行得非常快,然后可以在测试本身中创建和销毁它。
受限/无访问权限
如果您必须编写测试以与不受控制的服务器集成(例如第三方API),则方法是编写远程服务的“模拟”,并通过合同测试来检查模拟的行为仍然与真实行为相同。我通常将它们放在不同的版本中,并偶尔运行它,只是为了知道我的模拟服务器与实际服务器没有分歧。
一旦有了模拟服务器,就可以为其编写一个适配器层,并在集成测试中进行覆盖。您的其余代码将仅使用适配器,因此可以使用普通单元测试进行测试。
当然,当您也具有完全访问权限时,也可以采用第二种方法,但是通常编写测试工具包会更好,因为这类测试倾向于在项目和团队之间以及服务器时进行重复。更改需要一大群人来修复他们的测试,而如果将测试工具包编写为服务器代码的一部分,则只需在一个地方进行更改即可。