gpt4 book ai didi

c# - 如何使用 ServiceStack 测试 WebServiceException 处理?

转载 作者:太空宇宙 更新时间:2023-11-03 13:29:50 24 4
gpt4 key购买 nike

我有一个类似这样的 Controller 方法:

public class FooController : Controller {

private IApi api;

public FooController(IApi api) {
this.api = api;
}

public ActionResult Index() {
try {
var data = api.GetSomeData();
return(View(data));
} catch(WebServiceException wsx) {
if(wsx.StatusCode == 409) return(View("Conflict", wsx));
throw;
}
}
}

API 实例是 ServiceStack JsonClient 的包装器,我的 ServiceStack 服务上有一些方法会引发 409 冲突,例如:

throw HttpError.Conflict(StatusMessages.USERNAME_NOT_AVAILABLE);

在我的单元测试中,我使用 Moq 来模拟 IApi,但我不知道如何“模拟”远程服务器返回 409 时 JsonClient 抛出的 WebServiceException。我的单元测试代码如下所示:

var mockApi = new Mock<IApi>();
var ex = HttpError.Conflict(StatusMessages.USERNAME_NOT_AVAILABLE);
var wsx = new WebServiceException(ex.Message, ex);
wsx.StatusCode = (int)HttpStatusCode.Conflict;
wsx.StatusDescription = ex.Message;

mockApi.Setup(api => api.GetSomeData()).Throws(wsx);

var c = new FooController(mockApi.Object);
var result = c.Index() as ViewResult;
result.ShouldNotBe(null);
result.ViewName.ShouldBe("Conflict");

但是,有几个字段 - ErrorMessageErrorCodeResponseStatus - 是只读的,因此无法设置在我的单元测试中。

当客户端从服务器接收到 HTTP 错误响应时,如何让 ServiceStack 在单元测试中抛出相同的 WebServiceException?

最佳答案

查看 source code对于 WebServiceException , 似乎 ErrorMessage , ErrorCode , 和 ResponseStatus摘自 ResponseDto ,这是可公开设置的。

看起来有一个 CreateResponseStatus(string errorCode, string errorMessage, IEnumerable<ValidationErrorField> validationErrors)方法 here这将有助于创建这个?

关于c# - 如何使用 ServiceStack 测试 WebServiceException 处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21005190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com