在Refit上模拟ApiException

在Refit上模拟ApiException如何使用 Mock 和 Refit 来测试应用程序是否正确报告了 422 状态代码和字符串错误 或其他任何内容

目录

介绍

Web API

测试


如何使用MockRefit来测试应用程序是否正确报告了422状态代码和字符串错误(或其他任何内容)。

介绍

我使用Refit在我的代码中调用Web API

我也喜欢在Web API必须报告应用程序中存在逻辑错误而不是异常时使用StatusCode 422并使用测试来验证代码。

所以我想在这里写下这个问题,我们如何使用MockRefit来测试应用程序是否正确报告了422状态代码和字符串错误(或其他任何内容)。

Web API

我的Web API有一个带有Response和一个Error属性的类。

public class Response { public string Error { get; set; } public void SetError(string error) { Error = error; } }

和一个refitinterface

public interface IClient { [Post("/Controller/MyMethod")] Task MyMethod([Body]Parameters parameters); }

工作代码可能是这样的:

public string ApiCaller(IClient client) { try { await client.MyMethod ( new Parameters(...); ); } catch(ApiException ex) when (ex.StatusCode == HttpStatusCode.UnprocessableEntty) { return ex.GetContentAsync().Result.Errors } return string.Empty; }

使用此代码,我们可以在Refit抛出ApiException。如果另一个异常是throws(500, 404 …),就会有一个异常,我们可以用另一个catch语句或以集中的方式捕获它。

测试

我们使用MockApiException来构建模拟使用的异常:

public static MockApiException { public static ApiException CreateApiException(HttpStatusCode statusCode, T content) { var refitSettings = new RefitSettings; return ApiException.Create(null, null, new HttpResponseMessage { StatusCode = statusCode, Content = refitSettings.ContentSerializer.ToHttpContent(content) }, refitSettings).result; } }

我们可以Mock客户端并使用MockApiException来构建模拟将抛出的异常。

var response = new Response("Error thrown by web api") var mockClient = new Mock(); mockClient.Setup(x => x.MyMethod( It.Is(...) )) .Thrown(MockApiException.CreateApiException(HttpStatusCode.UnprocessableEntity, response);

现在可以测试一下,当我们调用ApiCallerrefit抛出422异常时,结果等于错误。

var result = ApiCaller(mockClient.Object); Assert.That(result == "Error thrown by web api");

https://www.codeproject.com/Tips//Mock-ApiException-on-Refit

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205411.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午6:05
下一篇 2026年3月19日 下午6:05


相关推荐

  • MockMVC使用

    MockMVC使用https www cnblogs com xiaohunshi p 5706943 htmlhttp jinnianshilo iteye com blog 2004660https www cnblogs com xd03122049 p 6001457 html

    2026年2月13日
    3
  • 【建议直接收藏】Windows 11上用OpenClaw接入DeepSeek:2026超详细保姆级安装配置教程!

    【建议直接收藏】Windows 11上用OpenClaw接入DeepSeek:2026超详细保姆级安装配置教程!

    2026年3月19日
    6
  • 在PyCharm中给项目配置python解释器

    在PyCharm中给项目配置python解释器前言 在使用 Pycharm 编写 python 代码时 一般利用本地的 python 解释器 因此我们要进行下载解释器 安装解释器 配置解释器操作 Python 解释器 当我们编写 Python 代码时 我们得到的是一个包含 Python 代码的以 py 为扩展名的文本文件 要运行代码 就需要 Python 解释器去执行 py 文件 来自廖雪峰的官方网站 解释器 英语 Interpreter 又译为直译器 是一种电脑程序 能够把高级编程语言一行一行直接转译运行 解释器不会一次把整个程序转译出来 只像一位 中间人 每次运行

    2026年3月27日
    3
  • maven项目使用mybatis插件Free Mybatis plugin「建议收藏」

    maven项目使用mybatis插件Free Mybatis plugin「建议收藏」首先安装插件如图所示选择第一个插件安装,安装完毕重启IDEA 然后我们选择我们已经配置好的数据库如下图在需要生成配置文件的数据库上右键,就会出现mybatis-generator选项打开这个就打开如上图所示配置窗口,这里我们使用默认的就行,如果不想使用lombok去掉这个勾选即可,然后我们选择ok即可就会生成以上文件,一个数据库的映射类,一个操作数据库的映射接口,和具体操作数据库的xml,主配置文件就在Configure里面这个自己生成…

    2026年4月17日
    5
  • 如何轻松制作火爆全网的AI真人手办?超详细教程!

    如何轻松制作火爆全网的AI真人手办?超详细教程!

    2026年3月13日
    3
  • Nutch使用调研报告

    Nutch使用调研报告nbsp nbsp nbsp nbsp nbsp nbsp 这是半年前使用 Nutch 的时候写的 本文讲述了如何搭建一个可运行的 Nutch 系统 Nutch 是个开源的建立搜索引擎的项目 功能很强大 有时间去研究研究还是很好的 一 Nutch 的安装 nbsp nbsp nbsp nbsp nbsp nbsp Nutch 的安装比较简单 下面介绍在 Linux 下的安装步骤 在 Windows 下也能运行 不过先得安装 cygwin 一个在 windows 环境下模拟 Linux 的软件 具体安装步

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号