gpt4 book ai didi

c# - 如何在单元测试中模拟字符串响应?

转载 作者:行者123 更新时间:2023-12-03 22:57:39 25 4
gpt4 key购买 nike

这是我迄今为止的测试结果:

[TestFixture]
public class IndividualMovieTests
{
[Test]
public void WebClient_Should_Download_From_Correct_Endpoint()
{
const string correctEndpoint = "http://api.rottentomatoes.com/api/public/v1.0/movies/{movie-id}.json?apikey={your-api-key}";
ApiEndpoints.Endpoints["IndividualMovie"].ShouldEqual(correctEndpoint);
}

[Test]
public void Movie_Information_Is_Loaded_Correctly()
{
Tomato tomato = new Tomato("t4qpkcsek5h6vgbsy8k4etxdd");
var movie = tomato.FindMovieById(9818);
movie.Title.ShouldEqual("Gone With The Wind");
}
}

我的 FIndMovieById 方法上线并获取 JSON 结果,这意味着它有点破坏了单元测试背后的原则。我有一种感觉,我必须模拟这个字符串响应,但我真的不知道如何处理这个问题。

您将如何进行这个特定的单元测试?

最佳答案

在你的第二个[Test]中,我建议不要关注FindMovieById方法的特定返回值,除非你真的想测试你给定的输入应该总是导致“飘”。您所进行的测试似乎是一个非常具体的测试用例,其中特定的输入数字会产生特定的输出,这在针对实际数据库运行时可能会或可能不会改变。另外,由于您不会针对实际的 Web 服务进行测试,因此进行这种验证基本上是自私的 - 您并没有真正测试任何东西。相反,重点测试 Tomato 类如何处理参数验证(如果有的话),以及 Tomato 类实际调用服务来获取返回值。不要测试特定的输入和输出,而是测试类的行为,这样如果将来有人更改它,测试应该中断,以提​​醒他们可能破坏了工作功能。

例如,如果您有输入验证,则可以测试您的 Tomato 类在检测到无效输入时是否引发异常。

假设您的 Tomato 类具有某种用于请求和检索结果的 Web 客户端功能,您可以插入实际 Web 代码的一些 stub 实现或模拟实现,以确保 Tomato 实际上正在调用适当的 Web 客户端请求和处理响应的代码。

关于c# - 如何在单元测试中模拟字符串响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5711307/

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