junit HOW TO公寓测试客户端服务器程式码

hrysbysz  于 2022-11-11  发布在  其他
关注(0)|答案(4)|浏览(126)

我目前正在写一个Java客户端服务器应用程序。所以我想实现两个库,一个用于客户端,一个用于服务器。客户端服务器通信有一个非常严格的协议,我不想用JUnit测试。
作为构建工具,我使用Maven和一个Husdon服务器来继续集成。
实际上,我没有任何好主意如何测试这些客户机/服务器库。
我有以下方法:
1.**缺点:**不幸的是,这将导致许多额外的工作。我不能100%确定客户端和服务器可以一起工作,因为我不确定测试是否完全相同。
1.编写一个单独的测试项目来同时测试客户端和服务器。

**缺点:**单元测试本身不属于项目,因此哈德逊不会自动运行它们。每个在这些库中更改任何内容的人都必须手动运行测试,以确保一切都是正确的。此外,我不会收到任何代码覆盖率报告。

有没有更好的方法来测试这样的代码?也许测试一个Maven多模块项目,或者类似的东西。
我希望任何人都能找到解决这个问题的好办法。

  • 谢谢-谢谢
lrpiutwd

lrpiutwd1#

将所有代码视为“将输入转换为输出”:X -> [A] -> Y
X是输入的数据,[A]是转换器,Y是输出。在本例中,您有以下设置:

[Client] -> X -> [Server] -> Y -> [Client]

因此,单元测试的工作方式如下:
1.您需要执行客户端程式码以产生X的测试。请确认程式码实际上会产生具有判断提示的XX在程式码中应该是final static String
1.在第二个测试中使用常量X调用服务器代码,该代码将常量转换为Y(另一个常量)。
1.第三个测试确保客户端代码可以解析输入Y
这样,您可以保持测试的独立性,同时仍然确保重要部分正常工作:组件 * 之间 * 的接口。

sg24os4d

sg24os4d2#

我的建议是使用两个级别的测试:
1.对于您的客户端/服务器项目,在单元测试中包含一些模拟,以确保对象接口按预期工作。
1.在构建之后,运行一个更广泛的集成测试,在一个或多个测试系统上自动安装编译好的客户端和服务器。然后,您可以确保协议的所有细节都得到了彻底的测试。在客户端/服务器项目的每个成功构建上触发这个集成测试项目。您可以使用JUnit来完成这项工作,并且仍然可以从哈德逊接收常规的报告。

mxg2im7a

mxg2im7a3#

解决这个问题的最新方法是使用Docker容器。创建一个Docker文件,其中包含一个基本映像和客户端服务器应用程序所需的所有必要依赖项。为分布式客户端-服务器系统的每个节点类型创建一个单独的容器,并使用TestNG或JUnit测试所有入口点服务器API/客户端交互。这种方法最好的部分是,您不会模拟任何服务调用。在大多数情况下,您可以编排所有的端到端客户端-服务器交互。
这种方法需要一点学习曲线,但Docker在开发社区中非常受欢迎,尤其是在解决这个问题方面。
下面是一个如何使用Docker客户端API在JUnit测试中提取Docker图像的示例:https://github.com/influxdb/influxdb-java/blob/master/src/test/java/org/influxdb/InfluxDBTest.java
上述方法现在是开源产品:testcontainers

iqxoj9l9

iqxoj9l94#

所以最后的解决方案是构建一个多模块项目,其中包含一个单独的测试模块,其中包括服务器和客户端模块。在Husdon中运行得很好,在Eclipse IDE中运行得更好。感谢@ Aaron的提示

相关问题