- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我继承了一个可以调用 SOAP 网络服务的小型控制台应用程序。以各种方式记录异常的嵌套 try-catch 是一团悲剧,我想围绕它在抛出 SoapException 时的行为进行一些测试。
问题:当我不能模拟接口(interface)并且不能使属性或方法“虚拟”时,我如何使用 Moq 模拟像 SoapException 这样的类?
更多的解释:
为了测试这个错误处理,我需要控制 SoapException 对象的 Actor
属性,以及 Detail
属性以验证错误处理。
我的单元测试代码片段:
[TestMethod]
public void MyTestMethod()
{
Mock<SoapException> soapMock = new Mock<SoapException>(MockBehavior.Strict);
soapMock.SetupGet<string>(ex => ex.Actor).Returns("Test Actor");
因为我正在模拟一个具体的类,并且 Actor
属性没有标记为“Virtual”,Moq 在执行 SetupGet(...)
时抛出这个异常> 测试运行期间的行:
System.NotSupportedException: Invalid setup on a non-virtual (overridable in VB) member: ex => ex.Actor
经过一些阅读,理想的答案是模拟一个接口(interface),在这种情况下我无法做到这一点。由于这是 .NET 框架中的一个类,我也无法神奇地将 Actor
属性标记为虚拟。
我如何模拟 SoapException,或者是否有其他方法可以验证错误处理?
顺便说一句,我首先着手创建一个实际的 SoapException,其中包含一些 XML 节点,但我很快就陷入了以编程方式创建 XML 文档树的困境。我可以做到,但它需要更多行测试设置代码,我希望尽可能避免。
最佳答案
无法使用 Moq 模拟它。一种选择是使用 Microsoft Fakes Framework 中的 Shim。您可以在您尝试模拟的代码不使用接口(interface)或者是虚拟方法(如您的场景)的场景中使用它。
请参阅以下来自 msdn 的 Shim 说明。
A shim modifies the compiled code of your application at run time so that instead of making a specified method call, it runs the shim code that your test provides. Shims can be used to replace calls to assemblies that you cannot modify, such .NET assemblies.
http://msdn.microsoft.com/en-us/library/hh549175.aspx
请注意,Fakes 框架仅适用于 Visual Studio Ultimate 或 Premium。
关于c# - 如何使用 Moq 模拟 SoapException 以单元测试错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21314672/
我试图在下面的代码中抛出超时异常。我尝试了一个简单的条件,但这不是正确的方法。我的问题是如何区分超时异常和 SOAPException? URL endpoint = new URL(null,
我正在使用 SoapException 来处理无效输入和我的网络服务中的所有其他类型的异常处理。它工作正常,我能够格式化并将正确的信息返回给客户。我正在遵循一种类似于此处解释的方法 http://ww
我正在尝试反序列化从 Web 服务接收到的 SoapException 消息。我收到以下异常: System.InvalidOperationException was unhandled Mes
我写了以下服务: namespace WebService1 { [WebService(Namespace = "http://tempuri.org/")] [WebService
编辑:我已经四处寻找答案,似乎没有人遇到类似的问题。在我看来,扔 SoapException应该根据需要格式化响应,而不仅仅是异常消息。感激地收到任何帮助。 我想返回一个 SoapException应
我有几个涉及 sql 的 WebMethods,当我调用一个方法时,它会发送一个涉及 com.mysql.jdbc.driver 的 soapException 这是我的连接方法(它不是网络方法,但它
是否可以使用 http.sys 将我自己开发的异常通过 Soap 发送到客户端?? 最佳答案 不幸的是,据我所知,答案是否定的。您不能在服务器端构建自己的自定义异常并期望通过 WSE 在客户端使用它们
我继承了一个可以调用 SOAP 网络服务的小型控制台应用程序。以各种方式记录异常的嵌套 try-catch 是一团悲剧,我想围绕它在抛出 SoapException 时的行为进行一些测试。 问题:当我
我正在处理一个旧网站。它正在调用 ASP.Net Web 服务(旧的 .asmx 文件)。每当 Web 服务中发生异常时,它都会抛出 SoapException。客户端捕获此异常但无法解析它。 我正在
我正在从 WSE 迁移 Web 服务客户端至 WCF . 我已经修改了内部错误和错误处理来处理 FaultExceptions 而不是 SoapExceptions。 该项目有一套广泛的测试用例来测试
我已经使用 Spring 创建了一个 Web 服务。在我的嵌入式 tomcat 服务器上运行它时工作正常。但是,当我将它打包为 JAR 文件并使用 java -jar 命令运行它时,我收到了这个异常。
我在服务器上使用 Web 服务,它工作正常。现在我想将我的网站转移到 Azure 服务器。目前,我在 azure 上创建了一个免费网站来测试它。 它是一个 Silverlight 应用程序,调用服务来
我有一个在 Azure 平台上运行 .NET 4.5 的 Web 应用程序。作为网络应用程序的一部分,我们将潜在客户发送到第三方网络服务。我们决定让前端通过 JS AJAX 调用与本地 Web 服务
我正在尝试向此 web service 发送请求为了得到响应:这是我的java代码 import org.apache.axis.client.Call; import org.apache.axis
我正在编写一个 ASP.NET Web 服务并抛出一个带有消息的 SoapException: throw new SoapException("BANG!", SoapException.Clien
尝试访问 MVC 站点中的 .asmx 网络服务时出现异常。我已经尝试了很多事情,比如在控制台应用程序中更新 Web 引用和构建另一个快速应用程序来测试,但无法通过这个问题。如果我从 svc 变量中提
我正在向端点发送 SOAP 请求。我正在使用Axis2。下面的代码在我的环境中运行良好,但在 Linux 设置上出现异常。 Linux 设置在客户端和服务器之间使用消息代理。 public SOAPM
我正在尝试创建采购发票: PurchseInvoice_Service pis = new PurchseInvoice_Service(); PurchseInvoice pi = new Purc
我正在开发 SOAP 网络服务。我在tomcat中运行成功。但是当我将它部署到 weblogic 时,发生了错误。我正在从标题向 Web 服务发送用户名和密码,但出现如下错误: ope
当我尝试使用安全性对 header 进行编码时出现以下错误: javax.xml.soap.SOAPException: unable to find namespace for prefix: ws
我是一名优秀的程序员,十分优秀!