Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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_Generics_Exception_Testing - Fatal编程技术网

C# 不存在泛型参数的单元测试

C# 不存在泛型参数的单元测试,c#,unit-testing,generics,exception,testing,C#,Unit Testing,Generics,Exception,Testing,我想知道如何(或者是否需要)测试代码中涉及泛型集合的特定场景 我所拥有的是: // Function private void Func(FieldInfo fieldInfo) { if(fieldInfo.FieldType.IsGenericType) { // Only support List<> right now Type gen_type = fieldInfo.FieldType.GetGenericTypeDefinition(

我想知道如何(或者是否需要)测试代码中涉及泛型集合的特定场景

我所拥有的是:

// Function
private void Func(FieldInfo fieldInfo)
{
   if(fieldInfo.FieldType.IsGenericType)
   {
      // Only support List<> right now
      Type gen_type = fieldInfo.FieldType.GetGenericTypeDefinition();
      if(gen_type != typeof(List<>))
      {
         throw new 
            NotSupportedException("Only Generic List is supported at this time");
      }
      // Find the generic list type
      Type[] generic_types = fieldInfo.FieldType.GetGenericArguements();
      if(generic_types.Length <= 0)
      {
         throw new 
            NotSupportedException("Generic List type not found!");
      }
   }
}
//函数
私有无效函数(字段信息字段信息)
{
if(fieldInfo.FieldType.IsGenericType)
{
//现在只有支持列表
类型gen_Type=fieldInfo.FieldType.GetGenericTypeDefinition();
if(gen_类型!=类型(列表))
{
抛出新的
NotSupportedException(“此时仅支持通用列表”);
}
//查找泛型列表类型
Type[]generic_types=fieldInfo.FieldType.GetGenericArguements();
如果(generic_types.Length读取上的MSDN页面,则该方法返回空数组的唯一时间似乎是表示的类型不是泛型类型。因为您知道此处表示的类型是泛型类型(即列表或列表),该方法将始终返回T或表示泛型参数的类型对象,IsGenericParameter属性的值为true


在当前状态下,泛型_-types数组永远不应该为空。我会说不,您不需要为它进行测试,不管您是在谈论单元测试,还是上面代码中的简单保护语句。这不适合于单元测试,因为它归结为两种情况之一:要么您最终测试framework(我们应该假设它已经被微软测试过了),或者最终测试单元测试实现的内部详细信息,这是一种测试反模式。对于guard语句,如果立即代码编写正确,则不应测试不可能的情况。此类运行时检查应保留用于运行时可能发生的事件,具体取决于nEnvironment,即使即时代码是正确的。

您可能认为不是。我可能错了,但我认为您不可能在没有至少一个参数的情况下实现泛型类型。正如James所说,类似于
var last=new List()的代码
应该被编译器捕获;我的2分钱是测试它是一种浪费。这听起来很合理,是一个很好的建议,谢谢你的回答