有没有一种方法可以阻止所有来自java单元测试的外部网络访问?

vlf7wbxs  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(241)

我经常在springbootjava应用程序(用gradle或maven构建)上工作,这些应用程序对外部服务(例如,对外部rest-likeapi)进行网络调用。在运行自动化(junit)测试时,我不希望发生这些调用,即使是偶然的。调用真正的端点(甚至是为测试而设计的“dev”环境)可能会影响外部状态,导致不必要的服务器工作负载,或者无意中向端点透露信息。它还可能导致测试不经意地依赖于该外部资源正在运行,如果在生成项目时或脱机生成项目时资源停止运行,则会导致生成失败。
这些调用通常应该发生的情况是,它们要么被模拟成什么都不做,要么应该指向同一台机器上的服务(例如,由测试生成的localhost上的wiremock端点,或者由测试使用testcontainers生成的本地docker容器)。
在这些情况下,我倾向于创建一个特定于测试的bean定义概要文件,该概要文件用一些明显虚假的东西覆盖所有http端点,这些东西保证不会路由到某个地方,例如。 http://example.invalid/bookSearch . 这样,如果开发人员没有在测试中模拟或更改端点,它就不会调用真正的端点并触发真正的副作用。
然而,这种方法可能容易出错,并且在实现中的疏忽或对未来的更改可能会导致仍然进行网络调用。示例包括:
开发人员可以添加一个新的端点,而不必记住或者知道他们需要覆盖测试路由
一开始可能会忽略一个端点被重写
第三方库可能会提出一个开发人员不知道或不知道的请求
我突然想到,可能有一个更防弹的解决方案,这种情况。例如,也许有一种方法可以告诉jvm或其底层的http/ftp/etc.库阻止所有外部网络通信。
在JavaSpringBootJUnit测试中,有没有一种方法可以阻止非本地网络访问,或者提供一种保证,即不会调用外部网络端点?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题