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 ;
}

この場合、コード コントラクトと例外の使用に関する私の仮定は正しいですか。例外をコード コントラクト (またはその逆) に置き換えることは論理的だと思いますか?

コードはテストされていません。単なるシナリオ例です

4

2 に答える 2

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>()));中に入れます。filehelperobj.GetContent(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;
    }
}
于 2012-04-27T15:56:40.490 に答える
1

行が間違っていると仮定すると (つまり、パスを使用するに null のパスをテストする)、そうです。これは有効な前提条件であり、コード コントラクトである必要があります。

于 2012-04-27T15:53:35.177 に答える