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
C# 依赖注入和单元测试-静态助手方法或私有实例方法_C#_Unit Testing_Dependency Injection - Fatal编程技术网

C# 依赖注入和单元测试-静态助手方法或私有实例方法

C# 依赖注入和单元测试-静态助手方法或私有实例方法,c#,unit-testing,dependency-injection,C#,Unit Testing,Dependency Injection,从单元测试和依赖注入的角度来看,当涉及辅助方法时,通常采用的规范是什么 以下是我的例子: public class GoodiesController : Controller { private IMyContext _context; public GoodiesController(IMyContext context) { _context = context } public async Task<IAction> GetTho

从单元测试和依赖注入的角度来看,当涉及辅助方法时,通常采用的规范是什么

以下是我的例子:

public class GoodiesController : Controller
{
   private IMyContext _context;

   public GoodiesController(IMyContext context)
   {
      _context = context
   }

   public async Task<IAction> GetThoseGoodies()
   { 
       if(YouLikeThemThisWay(Request.Path))
        {
           var result = await _context.GoGetThemThisWay()
        } else { }
    }
公共类货物控制器:控制器
{
私有IMyContext\u上下文;
公共物品控制器(IMyContext上下文)
{
_上下文=上下文
}
公共异步任务gethosegodies()
{ 
如果(您喜欢此方式(Request.Path))
{
var result=await_context.GoGetThemThisWay()
}else{}
}

我的问题是,作为某个类中的静态助手或作为私有实例方法,使用
您喜欢的mthisway(字符串路径)
是否更好?假设我可能有两种
您喜欢的mthisway

这取决于
您喜欢的mthisway(字符串路径)是什么
method没有。我使用静态方法的规则如下:

  • 它需要非基本依赖项吗?如果需要,请不要使用静态依赖项
  • 它会影响应用程序的状态吗?如果会,请不要使用static
  • 它是否扩展了内部无法访问的类或类型(如BCL类或Primative)的功能?如果是,请使用静态扩展
  • 如果我不能模拟这个例程,它会影响单元测试吗?比如,让它们变得更加困难?如果不会,那么就让它成为静态的
  • 它会被多个类型或类使用吗?如果是这样,它将成为静态的更好候选者
  • 该例程是否执行某种IO,比如调用数据库或文件系统?如果是这样,我不会将其设置为静态
  • 基本上,小型助手函数易于测试,不影响状态,或者通常可以使其成为静态。如果涉及状态,则例程需要一个通常会注入的依赖项,或者例程正在进行IO或IPC调用,则不要使其成为静态

    依赖性问题的一个警告是,从技术上讲,您可以使用方法注入来处理依赖性,但我喜欢保持简单。您的方法可能是静态的

    重用也是静态中的一个重要因素。如果例程只在一个类中使用,那么创建静态可能毫无意义。我的大多数静态方法都存在于可以在任何地方轻松访问的帮助器类中


    <>编辑:注意我通常要求这五条规则中的大部分或全部有助于静态,以便我甚至可以考虑静态化。

    我不认为我完全得到点2。该方法基本上不调用任何外部资源。它只是在提供的输入上工作。首先我想把它放在<代码>上下文< /代码>中,以及问题WA。s我真的需要嘲笑它还是仅仅称之为它(也就是说,把它从
    上下文中去掉
    ,因此我的问题是,
    静态的
    私有的
    )第#2点意味着您正在考虑的使静态的方法是否会影响应用程序的全局状态,也就是说,该方法是否会在某个地方更改某些无法“撤消”的内容,从而导致您无法在一行中多次执行具有相同结果的函数c只是接收一些输入,在本例中是一个字符串,然后像布尔一样返回一个输出,而不做任何其他事情。它可能是静态的一个很好的候选者。