2015-10-23 28 views
5

APIにログインする機能をテストしようとしています。当然、私は自分のユーザー名とパスワードにアクセスするためのテストクラスが必要です。しかし、私はこのプロジェクトを公開ソース管理に入れたいので、私のユーザ名とパスワードをコードで共有することはできません(想像してみてください)。 .userファイルに保存されているので、コマンドライン引数を使用します(他のユーザーのためにプロジェクトを中断することなくソース管理から外すことができます)。しかし、それらは実際にテストクラスに渡されるようではありません(少なくとも、私がEnvironment.GetCommandLineArgs()を使用するとき、私はそれらを見ません)。どうすれば他のユーザーのためにプロジェクトを中断することなくローカルにパスワードを保存できますか?方法はありますか?次のようにVisual Studioソース管理のパスワードを避けるためのユニットテストとコマンドライン引数

+2

チェックインする前に機密データを消去する設定ファイルはありません。 – DrewJordan

+0

このようなことを処理するには、より良い方法があります。これらの方法のうちの1つについて私の答えを見てください。機密情報を編集する必要があるファイルを用意することは、「災害」のレシピです(この情報がソース管理でどのくらい悪くなっているかによって異なります)。 ** **は忘れられます。 –

答えて

6

で行うための一般的な方法は次のとおりです。

  1. だけで実際の値なしで、あなたがこれらの事を保存したいファイルと同じ内容で、プロジェクトにテンプレートファイルを追加します。その場所に空白またはダミーの値を置きます。
  2. このテンプレートファイルをソースコントロールに追加
  3. ソースコントロールから実際の値を含む必要があるファイルを削除し、このファイルの今後のコピーを無視するように依頼します。 を実行しないでください。ただし、プロジェクトから削除してください。
  4. このようなコマンドが含まれている事前ビルドビルドイベントを追加します。

    IF NOT EXIST "$(ProjectDir)\App.config" COPY "$(ProjectDir)\App-template.config" "$(ProjectDir)\App.config" 
    

これは今このような効果があります。

  1. 設定ファイルのテンプレートがソースになりましたなし機密情報
  2. プロジェクトの新しいコピーをクローンまたはチェックアウトすると、実際のファイルwh実際にファイルが存在するかどうかを効果的にチェックして、上記のコマンドを実行します。テンプレートファイルから新しいコピーをコピーします。
  3. 新しく作成された実際のファイルを編集し、機密情報を追加します。
  4. この方法が機能するためにそれはあなたがディスク上に、あるいは中に存在しているファイルを無視するようにソース管理ツールを頼むことができることが不可欠である
  5. 実行ユニット・テストやプログラム

別のビルドを行いますプロジェクト自体を変更した後でコミットに自動的に追加しないようにプロジェクト自体を作成します。

1
  1. 機密情報(パスワード)を別の "SensitiveInfo.config"ファイルに入れます。

    <?xml version="1.0" encoding="utf-8"?> 
    <appSettings> 
        <add key="SecretPassword" value="87DFG8S7G9S8G98SDFGHSDFG978DA" /> 
    </appSettings> 
    
  2. 設定Sensitive.info "コピーは、常に"

  3. があなたの "App.configファイル" でこれを追加するには、 "出力ディレクトリにコピー":<appSettings file="SensitiveInfo.config"/>

  4. は「 "ingnore" あなたを確認してくださいSensitiveInfo.config "ファイルを.hgignore(Mercurial)または.hgignoreファイルに追加してください。gitignore(Git)

関連する問題