当前位置: 首页 > 面试题库 >

如何在单元测试中模拟缺乏网络连接性

东郭勇
2023-03-14
问题内容

通常的问题是如何模拟(作为一JUnit组测试用例的一部分)缺乏网络连接,因为这是某些测试用例中的重要考虑因素。有没有一种方法可以通过Java
API(或通过JVM选项)来执行,以便某些测试用例可以在网络断开的情况下运行?(模拟还是真实?)。

更具体的情况(如果没有普遍适用的解决方案)是我正在做大量的XML文件处理(包括XSD验证),并且我需要确保没有从网络上获取任何内容,特别是xsi:schemaLocation属性值(提示)未使用,并且实际上所有XSD都是从类路径获得的。我将Validator与自定义LSResourceResolver结合使用,该自定义LSResourceResolver加载类路径中可能需要的所有XSD。

我想我可以实现的resolveResource方法,LSResourceResolver以使其永不返回null(因此,从不退回到打开与资源的常规URI连接的默认行为),但是我不确定这是否足够,并且无论如何,如果我能够JUnit以模拟孤岛模式运行测试(而无需手动关闭计算机接口),我会更有信心。

更新

可接受的答案,即该-DsocksProxyHost方法正好提供了我所需的解决方案,因为JUnit任务可以接受VM参数(如果fork设置为true),因此我的Ant文件中可以包含以下内容:

<junit printsummary="true" showoutput="true" fork="true" maxmemory="256m">
    <jvmarg value="-DsocksProxyHost=127.0.0.1"/>
    ...

…包裹在里面,contrib:if因此我可以从命令行控制是否在网络连接条件下运行JUnit测试。


问题答案:

我不建议这样做,但是…您可以尝试使用安全管理器。默认情况下,JVM不使用安全管理器,通过设置-Djava.security.manager您将激活默认安全管理器。AFAIR,安全管理器的默认行为是阻止任何连接(只要未在安全策略中明确授予权限)。但。java.net.NetPermission每次阻止连接时,您都会获得Exception。您还可能遇到本地文件访问,反射调用等问题。

另一种可能性是将网络代理设置为不存在的地址,例如-DsocksProxyHost=127.0.0.1。然后,任何TCP套接字都将尝试使用SOCKS服务器而失败。



 类似资料:
  • 问题内容: 我正在使用RestTemplate 方法发布到端点。在我的测试文件中,我正在测试POST方法。但是用我目前的测试,我得到了POST请求。在测试文件中发出POST请求时,我需要模拟API的帮助 这是我的主文件 这是我的测试文件 问题答案: 您正在测试DataTestRepo类内部的逻辑,因此您不应模拟它。RestTemplate是DataTestRepo内部的一个依赖项,因此这正是您需要

  • 我在尝试包装我的代码以用于单元测试时遇到了一些问题。问题是。我有接口IHttpHandler: 现在很明显,我将在Connection类中有一些方法,这些方法将从my后端检索数据(JSON)。但是,我想为这个类编写单元测试,显然我不想编写针对真实后端的测试,而是一个被嘲弄的测试。我曾尝试谷歌一个很好的答案,但没有很大的成功。我以前可以并且曾经使用过Moq来模拟,但是从来没有在像HttpClient

  • 我还尝试将模拟转换为文档,如下所示 但这会在代码实现内部访问MongoCollection时产生NullpointerException异常。 这两个我都试过了 null 我厌倦了用java编写相同的测试,并在其中进行泛型的转换。 有人在Kotlin有嘲弄泛型类的经验吗?

  • 问题内容: 我刚开始使用Node,现在正在编写一些单元测试。对于前几个函数,我可以正常运行,但是现在我碰到了一个包含其中的函数。我的函数的简化版本如下所示: 我尝试使用基本节点断言测试库进行测试: 由于执行此操作的时间(以及结果)总是不同的,因此它将始终失败。 在Python中,我可以设置模拟类和对象。有没有一种方法可以在Node中解决此问题而无需将moment.utc()作为函数的参数? 问题答

  • 问题内容: 我正在为启动a 并使用返回的诺言执行一些逻辑的控制器编写单元测试。我可以测试触发$ modal的父控制器,但是我一生无法弄清楚如何模拟成功的诺言。 我尝试了多种方法,包括使用和强制履行承诺。但是,我得到的最接近的结果是与本 SO帖子中的最后一个答案相似的东西。 我已经在“旧的” 模式中看到了几次这样的问题。在“新” 模式下,我找不到太多的方法。 一些指针将不胜感激。 为了说明问题,我使

  • 我想测试一些错误处理逻辑,所以我想在我的单元测试中模拟特定的异常类型。我正在嘲笑对boto3的调用,但是我想让这个mock引发一个异常。我正在测试的代码遵循以下模式: 我已经创建了一个unittest模拟,但我不知道如何使它引发异常,因为这个参数NotFound exception。我尝试了以下方法,但不起作用,因为在计算except子句时,它得到了“exceptions必须派生自基类”: 如何在