C# 如何对字符串扩展方法进行单元测试

C# 如何对字符串扩展方法进行单元测试,c#,unit-testing,nunit,C#,Unit Testing,Nunit,我有一段代码,如下所示,我想对它进行单元测试,这是string类的一个扩展方法: public static string Replace(this string str, Dictionary<string, string> dict) { } 公共静态字符串替换(此字符串str,字典dict) { } 我的扩展方法在主项目中,所以我的单元测试项目甚至看不到它 我该怎么做?我正在使用Nunit。您可以像调用普通静态方法一样调用扩展

我有一段代码,如下所示,我想对它进行单元测试,这是string类的一个扩展方法:

public static string Replace(this string str, Dictionary<string, string> dict)
{            
}
公共静态字符串替换(此字符串str,字典dict)
{            
}
我的扩展方法在主项目中,所以我的单元测试项目甚至看不到它


我该怎么做?我正在使用Nunit。

您可以像调用普通静态方法一样调用扩展方法,方法是将被扩展类型的实例作为第一个参数传递(例如
StringExtensions.Replace(str,dict)


如果此扩展方法位于“主项目”中,则应在主项目的测试套件中进行测试,而不是在引用主项目的项目的测试套件中进行测试。

您可以通过将被扩展类型的实例作为第一个参数(例如
StringExtensions.Replace)来调用扩展方法,就像调用普通静态方法一样(str,dict)


如果此扩展方法位于“主项目”中,则应在主项目的测试套件中进行测试,而不是在引用主项目的项目的测试套件中进行测试。

此外,还需要从测试程序集中引用主程序集(从您的一条评论来看,这似乎是您特定情况下的问题),遇到这个问题的人还应该注意另外两个可能的问题:

  • 包含扩展方法的类必须是非泛型、非嵌套的静态类。(请参阅)
  • 为了使测试程序集能够访问该方法,类和方法必须是公共的,或者,如果它们是内部的,则必须将测试程序集与主程序集“交朋友”。(请参阅)

  • 除了需要从测试程序集中引用您的主程序集(从您的一条评论来看,在您的特定情况下,这似乎是问题所在)之外,遇到此问题的人还应该注意另外两个可能的问题:

  • 包含扩展方法的类必须是非泛型、非嵌套的静态类。(请参阅)
  • 为了使测试程序集能够访问该方法,类和方法必须是公共的,或者,如果它们是内部的,则必须将测试程序集与主程序集“交朋友”。(请参阅)

  • 为什么你不能从Nunit项目中引用你的主项目?你不能对项目中没有被测试项目引用的东西进行单元测试。有没有理由不引用它?我已经编辑了你的标题。请参见“”,其中的共识是“不,他们不应该”。是的,这是一个疏忽!我忘了添加引用,所以测试扩展方法没有什么特别之处。为什么您不能从Nunit项目中引用您的主项目?您不能对项目中未被测试项目引用的内容进行单元测试。有理由不引用它吗?我已编辑了您的标题。请看“”,其中的共识是“不,他们不应该”。是的,这是一个疏忽!我忘了添加一个参考,所以测试扩展方法没有什么特别之处。