2016-11-14 10 views
0

用ファイルのオープン故障を発生させるためにどのように、私はWindows 7の完全性のためにユニットテスト

下のVisual Studio 2012でC++を使用しています私は、コードを読んで、いくつかの基本的なファイルがあります:

は、クラスで定義されている:

を問題の
std::ifstream iniFileHandle; 

方法:

FileLoader::FILE_STATUS FileLoader::loadFile(const std::string& fullpathandfilename) 
{ 
    if (fullpathandfilename.empty()) 
    { 
     iniFileStatus = FILE_NOT_SPECIFIED; 
    } 
    else // parameter has 'something'... 
    { 
     if (!doesFileExist(fullpathandfilename)) 
     { 
      iniFileStatus = FILE_NOT_FOUND; 
     } 
     else // file found... 
     { 
      iniFileHandle.open(fullpathandfilename, std::ios::in); 

      if (!iniFileHandle.is_open()) // something went wrong 
      { 
       iniFileStatus = FILE_CANNOT_LOAD; // <== HOW TO TEST? 
      } 
      else // file opened! 
      { 
       iniFileStatus = FILE_OPEN; 
      } 
     } 
    } 

    return iniFileStatus; 
} 

このすべてが正常に動作しますが、私は難易度のgettinを抱えていますGoogleユニットテストでのカバレッジ

私が欠けているのは、is_open()が失敗するシナリオをシミュレート/作成する方法です。

は、私が試してみた:読み

  • 「exeファイル」というファイルを、現在別のアプリケーション で開かれ
  • ファイルを実行しますが、それらはすべてオープン。

このエラー条件は実際に発生する可能性がありますか?もしそうなら、どのように私はそれをテストすることができます失敗を模倣することができますか?

+1

はあなたが読むためのディレクトリを開いてみましたが?これはエラーを引き起こすはずですか? – silvergasp

答えて

1

コメントに記載されているとおり、ディレクトリを開こうとするとis_open()はfalseを返します。ファイルを読み取り専用(std::ios::in、これはifstreamの既定値でもあります)として開いているため、すべての場合が成功しました。

1

は、私が試してみた:

ファイルが別のアプリケーションで開かれますが、それらはすべてオープン。

ファイルが共有モードで開かれているため、他の人が読むことができます。排他的ファイルアクセスモードでファイルを開く必要があります。これを達成するには、MSVSを使用する場合、int _Protifstreamに渡します。そうでない場合はCreateFile()を使用できます。

例えば、あなたが独占的にWindowsで使用されるファイルを開くことができ、問題、エミュレートするには、次の

c:\pagefile.sys 
関連する問題