2

[ExternalDataSource()]コード化されたUIオートメーションを実行しており、ドキュメント(csv、xml ...)を読み取り、データをいくつかの辞書に解析するために呼び出されるメソッド属性を定義しました。より良い洞察を得られるように、ここにコピーします。

[System.AttributeUsage(System.AttributeTargets.Method)]
public class ExternalDataSource : System.Attribute
{
    public ExternalDataSource(string filename)
    {
        DirectoryInfo di = new DirectoryInfo(Assembly.GetExecutingAssembly().Location);

        string file = Path.Combine(Path.GetDirectoryName(di.FullName), filename);

        try
        {
            code
        }
        catch (Exception)
        {
            throw new UITestException("Cannot load data source document");
        }
    }
}

Assembly.GetExecutingAssembly().Locationその中で、TestResult/Out フォルダーにコピーされるファイルを取得するためにアクセスしようとします。この属性をアプリケーション全体で 1 つの TestMethod() だけに割り当てました。デバッグ中に、アプリケーションが属性の c'tor を 2 回入力することがわかりました。どちらも場所が異なります。1 つは bin/Debug フォルダーからのもので、もう 1 つは TestResults/Out フォルダーからのものです。2 つの質問:

  1. アプリケーションで 1 回しか呼び出していないのに、デバッガーがその属性を 2 回入力するのはなぜですか?
  2. 同じアセンブリの場所が変わるのはなぜですか?
4

1 に答える 1

0

誰も答えがなかったようですがmstest.exe、vs2012 JIT デバッガーを使用してコマンドラインから実行をデバッグしているときに、奇妙なことがわかりました。

System.Diagnostics.Debugger.Break()この属性がジッターであるクラスに配置すると、MSTest.exeから呼び出されましたが、このブレークポイントがtestmethodこの属性で装飾されたクラスにあると、QTAgent32.exeが呼び出されました。パラメータを処理するためにシングルトン クラスを実装しましたが、MSTest によってこの属性の ExternalDataSource に入力されていましたが、QTAgent32 (テスト) に入ると空でした。

私にとってうまくいった解決策は、そのシングルトンをデータで初期化することでした[TestInitialize()]

これが誰かに役立つことを願っています。

于 2013-01-07T16:04:21.693 に答える