Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在库中对WebRequest.CreateHttp进行单元测试_C#_Httpwebrequest - Fatal编程技术网

C# 在库中对WebRequest.CreateHttp进行单元测试

C# 在库中对WebRequest.CreateHttp进行单元测试,c#,httpwebrequest,C#,Httpwebrequest,我的场景是这样的——我在接口(IRestSupport)后面有一个具体的类(RestSupport),该接口有两个核心方法:CreateRequest和GetResponse。这个类允许我通过JSON与web端点对话。该类由另一个具有更高级别业务逻辑的类调用,以提供需要发送的确切JSON 我需要能够对这两个方法进行单元测试,以便它们在测试期间不调用端点。CreateRequest依赖于HttpWebRequest,因为我需要向Headers集合添加信息。还有更多的代码,但下面给出了一个示例 va

我的场景是这样的——我在接口(IRestSupport)后面有一个具体的类(RestSupport),该接口有两个核心方法:CreateRequest和GetResponse。这个类允许我通过JSON与web端点对话。该类由另一个具有更高级别业务逻辑的类调用,以提供需要发送的确切JSON

我需要能够对这两个方法进行单元测试,以便它们在测试期间不调用端点。CreateRequest依赖于HttpWebRequest,因为我需要向Headers集合添加信息。还有更多的代码,但下面给出了一个示例

var request = WebRequest.Create(url) as HttpWebRequest;
request.Headers.Add("Authorization", AuthorizationHeader);
我在网上看到了许多使用IWebRequestCreate的示例,这样您就可以控制请求的创建。我遇到的问题是,在使用HttpWebRequest时,我似乎无法使其正常工作。IWebRequestCreate的Create方法要求您返回WebRequest对象。web示例的缺点是它们没有使用HttpWebRequest。我无法从HttpWebRequest派生类,这是我问题的症结所在


我没有获得假货,但可以使用最低起订量。如果可以避免的话,我的目标是不修改库代码。

我想你说的是内存中的单元测试。
最简单的方法是在实现接口的另一个类中“隐藏”这两行。现在可以模拟接口了。这听起来很奇怪,你只有这两行。。。我想你们班上还有更多不可测试的东西。我的建议是将要测试的所有逻辑与一些不值得测试的“基础设施”细节分开

我想你说的是内存中的单元测试。
最简单的方法是在实现接口的另一个类中“隐藏”这两行。现在可以模拟接口了。这听起来很奇怪,你只有这两行。。。我想你们班上还有更多不可测试的东西。我的建议是将要测试的所有逻辑与一些不值得测试的“基础设施”细节分开

我昨天遇到了完全相同的问题,我就是这样解决的

包含
WebRequest
的类在构造函数中采用
IWebRequestCreate

class MyClass
{
    IWebRequestCreate _web;
    public MyClass(IWebRequestCreate web)
    {
       _web = web;
    }
    public void Download(string url)
    {
       var request = _web.Create(url);

    }
}
在应用程序中,我向IoC容器注册我的类:

class MyWebRequest : IWebRequestCreate
{
    public WebRequest Create(Uri uri)
    {
        return WebRequest.Create(uri);
    }
}
在测试中,我创建了一个模拟,其中包含需要覆盖的函数:

void TestSetupMocks()
{
    var request = new TestWebRequest();
    Mock<IWebRequestCreate> _webClientFactory;
    _webClientFactory.Setup(x => x.Create(uri)).Returns(request);
}

class TestWebRequest : WebRequest
{
   // Implement abstract functions
}
void TestSetupMocks()
{
var request=newtestwebrequest();
模拟网络客户端工厂;
_webClientFactory.Setup(x=>x.Create(uri)).Returns(request);
}
类TestWebRequest:WebRequest
{
//实现抽象函数
}

我昨天遇到了完全相同的问题,我就是这样解决的

包含
WebRequest
的类在构造函数中采用
IWebRequestCreate

class MyClass
{
    IWebRequestCreate _web;
    public MyClass(IWebRequestCreate web)
    {
       _web = web;
    }
    public void Download(string url)
    {
       var request = _web.Create(url);

    }
}
在应用程序中,我向IoC容器注册我的类:

class MyWebRequest : IWebRequestCreate
{
    public WebRequest Create(Uri uri)
    {
        return WebRequest.Create(uri);
    }
}
在测试中,我创建了一个模拟,其中包含需要覆盖的函数:

void TestSetupMocks()
{
    var request = new TestWebRequest();
    Mock<IWebRequestCreate> _webClientFactory;
    _webClientFactory.Setup(x => x.Create(uri)).Returns(request);
}

class TestWebRequest : WebRequest
{
   // Implement abstract functions
}
void TestSetupMocks()
{
var request=newtestwebrequest();
模拟网络客户端工厂;
_webClientFactory.Setup(x=>x.Create(uri)).Returns(request);
}
类TestWebRequest:WebRequest
{
//实现抽象函数
}