2016-06-22 4 views
1

私は、日付期間のタイプに基づいて期日を計算する拡張メソッドを持っています。空の列挙型を単体テストする方法は?

public enum OffsetType 
{ 
    Months = 1, 
    Weeks = 2, 
    Days = 3 
} 

どのように私はOffsetTypeenumを提供(または無効に提供されていない場合ArgumentOutOfRangeExceptionがスローされていることを確認することができます。OffsetType列挙は、これらの値が可能

public static DateTime CalculateDueDate(this DateTime date, OffsetType offsetType, int offset) 
{ 
    switch (offsetType) 
    { 
     case OffsetType.Days: 
      return date.AddDays(offset); 
     case OffsetType.Weeks: 
      return date.AddWeeks(offset); 
     case OffsetType.Months: 
      return date.AddMonths(offset); 
     default: 
      throw new ArgumentOutOfRangeException("offsetType", offsetType, null); 
    } 
} 

:メソッドは次のようになります値)? OffsetTypeのパラメータがnullではない場合、その例外のユニットテストについても心配する必要はありますか?

UPDATE:

私は複数回答に投票することができたいと思います。私はLeedasblinkenlightで示される範囲外の値を使うことに決めました。ここに私のフィンユニットテストは次のとおりです。

[Test] 
    public void CalculateDueDate_Throw_Exception_Test() 
    { 
     var date = DateTime.Now; 
     var period = 3; 
     var offsetType = (OffsetType) (-1); 

     Assert.Throws<ArgumentOutOfRangeException>(() => date.CalculateDueDate(offsetType, period)); 
    } 
+0

enumsはnullにできません。値型 –

答えて

5

あなただけの列挙型に範囲外の値をキャストすることができます:あなたが使用できる値

Assert.Throws<ArgumentOutOfRangeException>(() => { 
    CalculateDueDate(date, (OffsetType)(-1), offset); 
}); 

は、列挙型の基になる型に依存します。

0

あなたは例えば、値がEnum.IsDefinedと、特定の列挙型に対して有効であるかどうかを確認することができます。彼らはnullにすることはできませんので

if (!Enum.IsDefined(typeof(OffsetType),offsetType)) 
{ 
    throw new ArgumentOutOfRangeException("offsetType", offsetType, null); 
} 

列挙型は値型です。あなたが明示的にキャストすることにより、不正な値を構築することができます

2

範囲外のintOffsetTypeに、例えば

OffsetType t = (OffsetType)5; 

あなたは、CalculateDueDateを呼び出し、それを渡すことができますユニットテストのために構築され、不正な値、およびタイプArgumentOutOfRangeExceptionの例外がスローされると主張します。

注:あなたはすべてのenum例をカバーする網羅switchを実行するとき、それはあなたがEnum.IsDefined(typeof(OffsetType), t)を使用して、無効な値をチェックする必要がありdefaultブランチに一部有効な例をカバーする状況では、状況で冗長ですが。

関連する問題