Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使一个可靠的web服务不可靠,但以可控的方式?_Java_Web Services_Mocking - Fatal编程技术网

Java 使一个可靠的web服务不可靠,但以可控的方式?

Java 使一个可靠的web服务不可靠,但以可控的方式?,java,web-services,mocking,Java,Web Services,Mocking,我有一个基于Java6的web服务客户机,使用标准的基于Java6注释的方法(即没有Axis或其他第三方web服务库),它工作得非常好。我调用的web服务也是如此,这很好,但现在我需要编写错误处理代码,并且我需要能够以可控的方式使现有的web服务不可靠 有很多模拟框架,它们可能很有用,但我现在不需要能够用预先记录的答案或任何东西来模拟服务,只需要引入不可靠性,导致web服务库失败,这样我就可以优雅地处理这种情况。这可能是本地运行的代理服务器 我使用EclipseJavaEE3.6,但Netbea

我有一个基于Java6的web服务客户机,使用标准的基于Java6注释的方法(即没有Axis或其他第三方web服务库),它工作得非常好。我调用的web服务也是如此,这很好,但现在我需要编写错误处理代码,并且我需要能够以可控的方式使现有的web服务不可靠

有很多模拟框架,它们可能很有用,但我现在不需要能够用预先记录的答案或任何东西来模拟服务,只需要引入不可靠性,导致web服务库失败,这样我就可以优雅地处理这种情况。这可能是本地运行的代理服务器

我使用EclipseJavaEE3.6,但Netbeans、IntelliJ和JDeveloper也是可选的


这样做的最佳方式是什么?

任何引入的不稳定都可能导致错过不稳定的操作途径。目标是覆盖代码中所有潜在的错误向量,而不是试图减少细节。

因为您没有透露足够的设置细节,可能在这里抛出异常,那里就足够了

说真的,对于这样的集成测试,我建议运行真实web服务容器的一些子集

根据服务的逻辑,其行为可能不可靠,因为:

  • 它使用的外部系统行为不端——试图模仿外部系统并抛出不同类型的错误
  • 数据库访问问题-尝试模拟DAO层并从那里抛出异常
  • 一般硬件问题-取决于:)尽量强调您认为合适的代码

我认为,与其给正在运行的web服务应用程序实例引入不可靠性,不如在单元/集成测试中模拟错误条件,并断言服务的顶层以您希望的方式响应

例如:

  • 如果数据层报告它无法与后端通信(如果数据层抛出异常,或者以任何方式指示失败),服务入口点如何响应请求
  • 如果其他必需组件抛出类似“不可用”的异常,服务入口点的行为如何
  • 您是否有任何超时逻辑,即如果处理请求的时间超过X秒,服务将返回错误?如果是这样,也可以在模拟测试中进行模拟
  • Tcpmon可以设置为代理,甚至可以模拟慢速连接。
    这将使您有机会模拟“对不起,不在这里”和“是的,我们在这里,但我们超时了”

    @Fosco,我只是拒绝了这一评论:)@Fosco,我认为那种评论是不必要的。ørn,当然是不必要的。不要让它影响你。我主要需要处理“对不起,不在这里”和“是的,我们在这里,但我们超时”的情况。另外,请注意,我无法控制web服务服务器。关于“这里有一些格式不正确的数据”、“你是谁?”等,你将为此使用try/catch块,因此请捕获你正在查找的特定异常,但要准备好让你的应用程序与其他应用程序一起轰炸。轰炸意外情况是可以的。您对我所述的需求有什么建议吗?如果您知道要捕获的错误条件,请在try/catch块中这样做,并捕获您想要的异常。假设任何模拟故障都可能是不可靠的(因为它是基于多种假设的),您不需要尝试测试它就可以了。我知道错误情况,但不知道web服务库将如何应对这些情况,因此我需要激发它们。您需要了解我的设置吗?正如我在回答中所写,了解WS的体系结构会很好——它应该做什么。我可能会把它复杂化,但从我的观点来看,您的WS可以做很多事情,每一件事情都可能导致失败。您可以简要描述WS中的逻辑流。此外,你还写过“引入不可靠性”,但这是什么类型的?因为WS中的一个简单错误只会导致服务抛出一个异常。如果您想模拟超时,您应该在测试工具中引入某种延迟器。它不是我的web服务,而是我调用的web服务。考虑它——就像我们一样——是一个简单的、幂等的查找服务,它的行为就像java。UTI.MAP。我可能措辞不精确。我需要激发web服务库对某些错误条件做出反应,以便能够处理对所述条件的响应。例如,最初提出问题后发现抛出的异常是
    javax.xml.rpc.soap.SOAPFaultException
    ,它直接扩展了RuntimeException。感谢您的建议。它看起来很有用!