2012-04-27 17 views
1
void ReadContent(string path) 
{ 
    Contract.Requires(path!=null); 
    string contentofileasstring = filehelperobj.GetContent(path); 
    if(String.IsNullOrEmpty(contentofileasstring)) 
    { 
    throw new FileContentException(path + "No content found"); 
    } 
    m_xmlobj = contentofileasstring ; 
} 

この場合、コード契約と例外の使用を前提にしています。例外をコードコントラクトに置き換えることは論理的だと思いますか?コード契約の例外使用例

コード例のシナリオ[はい、それが有効な事前がある(それを使用しようとする前に、すなわち、ヌルのパスをテストする)あなたは間違った方法ラウンドラインを持っていたと仮定まあ

+1

このコードは奇妙に見えますが、使用後に確認してください。それをクリアしてください。 –

+0

申し訳ありません、投稿を編集しました – Jimmy

+0

編集後、このエラーはやや誤解を招きます。ファイルが間違った(空の)コンテンツで見つかった場合はどうなりますか? –

答えて

1

私はおそらく次のような実装のために行くだろう:

private void ReadContent(string path) 
{ 
    Contract.Requires<FileMissingException>(File.Exists(path)); 
    string content = filehelperobj.GetContent(path); 
    m_xmlobj = content; 
} 

ポスト編集

それはあなたが検証したいコンテンツだとして、私は​​メソッド内Contract.Ensures(!String.IsNullOrEmpty(Contract.Result<string>()));を置きます。次に、読み込まれるコンテンツがnullまたは空の場合、私は例外をスローします。例えば

public string GetContent(string path) 
{ 
    Contract.Requires<FileMissingException>(File.Exists(path)); 
    Contract.Ensures(!String.IsNullOrEmpty(Contract.Result<string>())); 

    using(var reader = new StreamReader(File.OpenRead(path))) 
    { 
     var content = reader.ReadToEnd(); 

     if(String.IsNullOrEmpty(content)) 
      throw new FileContentException("No content found at file: " + path); 

     return content; 
    } 
} 
+0

コンテンツが空の場合はどうなりますか?それが私が(契約と例外の使用の間に)見つけたいと思っている状況です。 – Jimmy

+0

@Jimmyあなたの編集した質問に答えて私の答えを更新しました。 – Lukazoid

1

をtested.Justありませんしたがって、コード契約でなければなりません。

+0

申し訳ありません、投稿を編集しました – Jimmy

+0

編集した投稿を読むことを願っています。「有効な」コード契約と「有効でない」コード契約は区別されますか? – Jimmy

関連する問題