【发布时间】:2021-07-03 18:11:10
【问题描述】:
tl;dr:我在嘲笑 restease 时遇到了麻烦**
另外,我意识到我可能完全走错了路,所以任何朝着正确方向的建议/推动都会有很大帮助。我对此很陌生。
我正在制作一个小型 HTTP 客户端库,围绕 RestEase 构建。 RestEase 非常好用且易于使用,但我在模拟调用以进行单元测试时遇到了麻烦。
我想使用 moq 和 NUnit,但我无法正确模拟 RestClient。示例(为简洁起见缩短):
IBrandFolderApi - restease 发送调用所需的接口
public interface IBrandFolderApi
{
[Post("services/apilogin")]
Task<LoginResponse> Login([Query] string username, [Query] string password);
}
BrandfolderClient.cs - 主类
public class BrandfolderClient : IBrandfolderClient
{
private IBrandFolderApi _brandFolderApi { get; set; }
public BrandfolderClient(string url)
{
_brandFolderApi = RestClient.For<IBrandFolderApi >(url);
}
public async Task<string> Login(string username, string password)
{
LoginResponse loginResponse = await _brandFolderApi .Login(username, password);
if (loginResponse.LoginSuccess)
{
....
}
....
return loginResponse.LoginSuccess.ToString();
}
}
单元测试
public class BrandFolderTests
{
BrandfolderClient _brandfolderClient
Mock<IBrandFolderApi> _mockBrandFolderApii;
[SetUp]
public void Setup()
{
//The test will fail here, as I'm passing a real URL and it will try and contact it.
//If I try and send any string, I receive an Invalid URL Format exception.
string url = "https://brandfolder.companyname.io";
_brandfolderClient = new BrandfolderClient (url);
_mockBrandFolderApii= new Mock<IBrandFolderApi>();
}
....
}
所以,我不知道如何正确模拟 Restclient,因此它不会向实际 URL 发送实际请求。
测试在构造函数中失败 - 如果我发送一个有效的 URL 字符串,那么它将发送一个对实际 URL 的调用。如果我发送任何其他字符串,则会收到无效的 URL 格式异常。
我相信我没有在其余客户端上正确实施某些东西,但我不确定在哪里。我非常坚持这一点,我一直在疯狂地搜索和阅读,但我错过了一些东西,我不知道是什么。
【问题讨论】:
标签: c# unit-testing .net-core httpclient moq