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

到目前为止,这是我的测试内容:

[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方法的特定返回值,除非您真正想测试给定的输入应始终导致“ Gone With the Wind”。您所进行的测试似乎是一个非常具体的测试用例,其中特定的输入数字会导致特定的输出,在针对您的实际数据库运行时,这可能会更改,也可能不会更改。另外,由于您不会针对实际的Web服务进行测试,因此进行这种验证基本上是自服务的-您实际上并未进行任何测试。相反,应专注于测试Tomato类如何处理参数的验证(如果有的话),以及Tomato类实际上是调用服务以获取返回值。而不是测试特定的输入和输出,而是测试类的行为,以便将来有人更改类时,测试应该中断以警告他们可能已损坏的工作功能。

例如,如果您具有输入验证,则可以测试如果检测到无效输入,则Tomato类会抛出异常。

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

NUnit-用于测试事务的单元测试用例 - c#

我有如下方法。我想为以下方法编写两个测试用例。1)提交数据成功完成交易2)带有回滚数据的失败事务如何编写涉及事务并成功与失败的测试用例?public async Task<List<string>> UpdateRequest(MetaData data, List<string> Ids, string requeste…

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

改造正在返回一个空的响应主体 - java

我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…

json数组,其中in数组返回错误?坏字符串 - javascript

我将json字符串文件解析为python,并且始终返回error。我使用了在线json格式化程序和验证器,它们也返回错误,因此我需要帮助使我的json正确并告诉我错误 [{ "sentence_id": "TR.00001", "sentence": { "text": …

每个文件合并后添加换行 - python

我有很多类似以下内容的JSON文件:例如。1.json{"name": "one", "description": "testDescription...", "comment": ""} test.json{"name"…