对不存在的泛型参数进行单元测试
本文关键字:单元测试 参数 泛型 不存在 | 更新日期: 2023-09-27 17:49:24
我想知道如何(或者如果我需要)在我的代码中测试涉及泛型集合的特定场景。
我有这个:
// 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!");
}
}
}
我的问题是,如果我知道泛型类型是一个列表,我是否需要检查长度是否小于或等于零?我总是保证有一个泛型类型参数吗?如果不是,我该如何测试它(即,获得要抛出的异常)?
阅读type. getgenericarguments()上的MSDN页面,似乎只有当表示的类型不是泛型类型时,该方法才会返回空数组。由于您知道这里表示的类型是泛型类型(即List或List<>),因此该方法将始终返回T或表示泛型参数的类型对象,其IsGenericParameter属性的值为true。
在当前状态下,generic_types数组不应该为空。我会说不,你不需要测试它,不管你是在谈论一个单元测试,还是一个简单的保护语句,就像你在上面的代码。它不适合用于单元测试,因为它归结为两种情况之一:要么您最终测试框架(我们应该假设已经由Microsoft测试过),要么您最终测试单元测试实现的内部细节,这是一个测试反模式。对于guard语句,如果立即代码编写正确,则不应该测试不可能出现的情况。像这样的运行时检查应该保留给根据环境可能在运行时发生的事情,即使即时代码是正确的。