Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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
Unit testing 正在为单元测试和moq重构Appsettings和HttpContext_Unit Testing_Refactoring_Moq_Mstest - Fatal编程技术网

Unit testing 正在为单元测试和moq重构Appsettings和HttpContext

Unit testing 正在为单元测试和moq重构Appsettings和HttpContext,unit-testing,refactoring,moq,mstest,Unit Testing,Refactoring,Moq,Mstest,我已经看了很多例子,但是在本例中,我希望在下面的重构方法上有一个新的视角,这样我就可以对它进行单元测试了。我将mstest与moq一起使用,我知道appsettings是一个问题,HttpContext也被密封了。。。。 非常感谢任何帮助或想法(建设性的) public void DoClaimSearch(SearchClaimInfo clmRequest) { var result = claimManager.ClaimSearch(clmRequest);

我已经看了很多例子,但是在本例中,我希望在下面的重构方法上有一个新的视角,这样我就可以对它进行单元测试了。我将mstest与moq一起使用,我知道appsettings是一个问题,HttpContext也被密封了。。。。 非常感谢任何帮助或想法(建设性的)

   public void DoClaimSearch(SearchClaimInfo clmRequest)
    {
        var result = claimManager.ClaimSearch(clmRequest);
        if (result.RespMsg.TotalRowCount > Convert.ToInt32(ConfigurationManager.AppSettings.Get("TotalRowCount_Max_ClaimSearch")))
        {
            string ResKey = HttpContext.GetGlobalResourceObject("Global", "info_toomanyrecordsmatch.Text").ToString();
            ResKey = ResKey.Replace("{0}", result.RespMsg.TotalRowCount.ToString());
            View.AddNotification(WidgetNotificationType.Error,ResKey);
        }
        else
        {
            View.SetWidgetResponseData(result.RespMsg.SearchResults);
        }
    }
你可以:

第一个解决方案:

通过参数将两个配置值传递给方法。这是否是一个好主意取决于该方法的调用位置。从设计角度来看,这可能不是一个好主意,但它将非常容易测试(只需在测试中发送这些参数的硬编码值)

第二种解决方案:

创建一个类来封装对这些资源的调用。某种配置代理。这个类将有一个接口并被注入构造函数中。这将使模拟和测试变得容易。它将为访问您的资源添加一个抽象。配置代理客户端将不关心资源是否位于Resx、.config、HttContext或任何其他文件中

第三种解决方案:

让类的构造函数检索这些值,并将它们分配给可以在函数中使用的私有成员变量。与解决方案1类似,这将阻止调用代码了解这些配置值。要轻松测试这一点,请使用第二个非默认构造函数来接收参数中的配置值。这样,如果您只使用默认构造函数,那么ctor将调用ConfigurationManager等。但是在测试中,您可以调用第二个构造函数并传入这些值(这甚至需要模拟这些值)。

您可以:

第一个解决方案:

通过参数将两个配置值传递给方法。这是否是一个好主意取决于该方法的调用位置。从设计角度来看,这可能不是一个好主意,但它将非常容易测试(只需在测试中发送这些参数的硬编码值)

第二种解决方案:

创建一个类来封装对这些资源的调用。某种配置代理。这个类将有一个接口并被注入构造函数中。这将使模拟和测试变得容易。它将为访问您的资源添加一个抽象。配置代理客户端将不关心资源是否位于Resx、.config、HttContext或任何其他文件中

第三种解决方案:


让类的构造函数检索这些值,并将它们分配给可以在函数中使用的私有成员变量。与解决方案1类似,这将阻止调用代码了解这些配置值。要轻松测试这一点,请使用第二个非默认构造函数来接收参数中的配置值。这样,如果您只使用默认构造函数,则ctor将调用ConfigurationManager等。但在测试中,您可以调用第二个构造函数并传入这些值(这甚至需要模拟这些值)。

感谢您使用3个解决方案进行响应。感谢您使用3个解决方案进行响应。