2010-02-24 53 views
-1

这里是我的问题,作为一个例子假设我有一种方法来转换某些类型。是这样的:我应该根据文档记录我的方法并进行测试吗?

/// <summary> 
/// Convierte el valor del objeto especificado a un valor equivalente de {T}. 
/// </summary> 
/// <typeparam name="T">El tipo del valor a regresar.</typeparam> 
/// <param name="source"> 
/// Un objeto <see cref="string"/> con el valor a convertir. 
/// </param> 
/// <returns> 
/// Un valor equivalente de <paramref name="source"/> de tipo {T} cuando la 
/// conversión se puede realizar, el valor por defecto de {T} en caso contrario. 
/// </returns> 
/// <exception cref="Exception"> 
/// Cuando <paramref name="source"/> no es un valor valido para {T}. 
/// </exception> 
/// <exception cref="FormatException"> 
/// Cuando <paramref name="source"/> no es un valor valido para {T}. 
/// </exception> 
/// <exception cref="NotSupportedException"> 
/// Cuando no se puede realizar la conversión. 
/// </exception> 
/// <exception cref="ArgumentNullException"> 
/// Cuando <paramref name="source"/> es <see langword="null"/>. 
/// </exception> 
/// <example> 
public static T ToGeneric<T>(this string source) where T : IComparable { 
    if(source == null) { 
     throw new ArgumentNullException("source","Cant be null"); //just as an example 
    } 
    TypeConverter converter = TypeDescriptor.GetConverter(typeof(T)); 
    return ((T)converter.ConvertFrom(source)); 
} 

正如哟可以看到我记录在每一个方法更多钞票的异常,但只有一个(ArgumentNullException)被我扔。

我使用我的文档作为基础来创建我的TestCases,所以在这种情况下,我会创建5个测试用例,一个用于每个异常,一个用于正确的用例。

我的问题,如果是这样做的正确方法? 如果我迟早会遵循我的模式,那么我会针对不会增加任何价值的IO东西进行一堆测试。 我认为唯一的选择就是记录我在我的方法中创建的异常,并且仅测试该异常,但是我的工作中的一些程序员不是很好,他们可能会困惑为什么该方法抛出NotSupportedException,如果该参数是不是空的(他们会说西班牙语,所以阅读例外信息对他们来说有点难)

何你处理这种事情,记录一切或你实际做的事情。

谢谢你的时间。

回答

1

看来你的所有异常都是RuntimeException。如果你真的担心正确记录它们(其目的似乎是调用者需要了解它们并处理它们),那么应该考虑使用检查的异常。这样,编译器自动创建(最少)文档,并且每个调用该方法的程序员都必须考虑可能的异常。

我使用我的文档作为基础来创建我的TestCases,因此在这种情况下,我将创建5个测试用例,每个用于一个异常,一个用于正确的用例。

这是一个值得赞美的方法。许多人只是测试正确的案例(如果有的话)。但是,更相关的异常(调用者应该以某种方式处理的异常)不应该是RuntimeExceptions。

正如您可以看到我记录了方法中的每个可能的异常,但只有一个(ArgumentNullException)被我抛出。

由于这是单元测试,不测试依赖的行为(包括他们的例外)。只测试通过你的方法的所有代码路径,这意味着让它抛出所有的异常,并抛出所有的catch块,但不关心未经检查的异常。 “遗传”异常应该在产生它们的单元的测试中进行单元测试。

+0

我忘了补充说,这是C#,所以没有检查异常(据我记忆),但我明白你的意思。谢谢 – 2010-02-24 07:10:35

相关问题