Можно ли смоделировать .NET HttpWebResponse?

У меня есть интеграционный тест, который получает некоторые результаты json со стороннего сервера. Это очень просто и отлично работает.

Я надеялся перестать на самом деле атаковать этот сервер и использовать Moq(или любую библиотеку Mocking, такую ​​​​как ninject и т. д.), чтобы перехватить и принудительно вернуть результат.

Это возможно?

Вот некоторые пример кода:-

public Foo GoGetSomeJsonForMePleaseKThxBai()
{
    // prep stuff ...

    // Now get json please.
    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("Http://some.fancypants.site/api/hiThere);
    httpWebRequest.Method = WebRequestMethods.Http.Get;

    string responseText;

    using (var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse())
    {
        using (var streamReader = new StreamReader(httpWebResponse.GetResponseStream()))
        {
            json = streamReader.ReadToEnd().ToLowerInvariant();
        }
    }

    // Check the value of the json... etc..
}

и, конечно, этот метод вызывается из моего теста

Я подумал, что, может быть, мне нужно передать в этот метод (или свойство класса?) mocked httpWebResponseили что-то в этом роде, но не был уверен, так ли это.Кроме того, ответ является результатом метода httpWebRequest.GetResponse().. так что, возможно, мне просто нужно передать издевательский HttpWebRequest?.

Будут очень признательны любые предложения с примерами кода!

62
задан Pure.Krome 22 March 2012 в 13:16
поделиться