2016-07-18 1 views
2

私はTeamCityをC#プロジェクト用に実行しています。ユニットテストはMSTestを使用して記述され、外部JSONファイルが含まれています。彼らは大規模なのでロードされているので、C#でエスケープする必要はありません。Teamcity - 別のJSONファイルにアクセスするテストを書く

私はこのようにそれらをインポートします。

[TestInitialize] 
public void Setup() 
{ 
    using (StreamReader r = new StreamReader(@".\currency2.json")) 
    { 
    _json = r.ReadToEnd(); 
    } 
    ... 

彼らはローカルで正常に動作。私は 'Copy always set'を持っていますが、Teamcityを使ってテストを実行すると、一時フォルダでそれらを見つけることができないというエラーが表示されます。それらはビルドサーバーにコピーされますが、この一時フォルダーにはありません。

はファイル 'Eを:\チームシティー\ buildAgent \ tempに\ buildTmp \ SYSTEM_SERVER 2016年7月18日15_28_19 \アウトの\ currency2.json' が見つかりませんでした。

を私はテストファイル名のよう**\bin\release\*test*.dllセットアップを持っていますテストビルドステップ。

助けてください。

+0

エラーメッセージは 'currency2.json'、コードサンプルは' currency1.json'です。 'currency1.json'はローカルをコピーするように設定されていますが、' currency2.json'は設定されていない可能性がありますか? –

+1

申し訳ありません、それは少し誤解を招くことです。打ち間違え。いずれのファイルも見つかりません。 – Matt

答えて

0

あなたのプログラム(そしてTeamCityで定義されている値)に引数を渡すこともできます。私は同様の問題があった

string[] programArgs; 
static void Main(string[] args) 
{ 
    programArgs = args 
} 

[TestInitialize] 
public void Setup() 
{ 
    using (StreamReader r = new StreamReader(programArgs[1])) 
    { 
    _json = r.ReadToEnd(); 
    } 
    ... 
} 
1

:この(これが唯一の擬似コードの一例である)のような

何か。

私は、いつも

チームシティーは、ビルドフォルダにファイルをコピーします=出力ディレクトリに

  • この

    にコピーをビルドアクション=コンテンツ
  • コピーをテストファイルのプロパティを変更しかし、それはあなたが期待するのと同じ構造を維持するようには思われません。

    私はファイルルックアップループを作成しました。これは、問題のテキストファイルが見つかるまで、予想されるフォルダを降ります。

    var pathLookups = new string[] 
         { 
          "2ndFolder\\3rdFolder\\test.json", // folder that normally workes 
          "3rdFolder\\test.json", 
          "test.json" 
         }; 
         foreach (var pathLookup in pathLookups) 
         { 
          try 
          { 
           jsonFileCollection = JsonFileLoader<TestJsonType>.LoadJson(pathLooksup); 
           if (jsonFileCollection!= null) 
           { 
            break; 
           } 
          } 
          catch (Exception) 
          { 
    
           Console.WriteLine("Attempted to load test json from path:" + pathLooksup); 
          } 
         } 
    

    これは、最もクリーンな解決策ではありませんが、それは仕事を完了します。これを少し上手く見えるようにリファクタリングすることができます。

関連する問題