2012-06-05 63 views
0

单元测试这些类型的方法的最佳做法是什么?单元测试的最佳实践枚举翻译器

public VerificationResultCode Translate(int value) 
    { 
     VerificationResultCode result; 

     if (Enum.IsDefined(typeof(VerificationResultCode), (int)value)) 
      result = (VerificationResultCode)((int)value); 
     else 
      throw new UnknownResultReturnFromGatewayException(); 

     return result; 
    } 

VerificationResultCode是枚举类型,如:

public enum VerificationResultCode 
{ 
     BankingNetworkError = 100, 
     NotEqual =101, 
     InputFormatError = 102, 
     MerchantAuthenticationFailed = 103, 

... 
} 

我们应该写为每个枚举成员的单个测试方法或只写一个一个试验方法有很多断言呢?!

+2

其中之一,你不应该整数编码为双打。你会有虚假的失败。 – usr

+4

两个测试。一个值正确,一个值不正确。注意你没有得到一个异常,然后你确实得到一个异常。除此之外,您还可以单元测试CLR从一个整数转换为枚举的能力。 –

+0

@usr Thansk!其编辑。 – Navid

回答

2

这段代码对单元测试来说太简单了。您应该单元测试取决于VerificationResultCode的行为,这也将测试Translate函数。更大的问题是,为什么你需要一个公共翻译函数而不是将其封装在对象中?

+0

它是我们尝试重构,增强和增加一些单元测试的一个来自Brownfield应用程序的小片段。 – Navid

+2

如果您重构遗留代码,那么您需要以足够大的粒度选择测试接缝,以便在测试中重构。单元测试像你的例子那样的小型翻译功能可能会适得其反,因为当你重构时你会打破几十个这样的微单元测试。 –

+0

感谢您的回答。你说这个代码对于单元测试来说太微不足道了。但这部分是一些支付网关的小片段,它有很多Web服务调用和数据访问逻辑。我想如果我测试依赖于枚举的行为它有点像集成测试。 – Navid