2

我正在运行编码的 ui 自动化并定义了一个方法属性,称为[ExternalDataSource()]读取文档(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 文件夹的文件。我将此属性仅分配给整个应用程序中的一个 TestMethod() ,在调试时,我发现应用程序两次进入该属性的 c'tor。两次位置都不一样。一旦它来自 bin/Debug 文件夹,另一次来自 TestResults/Out 文件夹。两个问题:

  1. 如果我在应用程序中只调用一次,为什么调试器会两次输入该属性?
  2. 为什么同一个程序集的位置会发生变化?
4

1 回答 1

0

好吧,似乎没有人有答案,但是在使用mstest.exevs2012 JIT 调试器从命令行调试运行时,我发现了一件奇怪的事情:

将 aSystem.Diagnostics.Debugger.Break()放入此属性为 jitter 的类中时,从MSTest.exe调用了但当此断点位于testmethod使用此属性修饰时,调用了QTAgent32.exe。我已经实现了一个单例类来处理我的参数,并且当它由 MSTest 在此属性中填充到 ExternalDataSource 中时,在输入 QTAgent32(测试)时它是空的。

对我有用的解决方案就是用[TestInitialize()].

希望这可以帮助某人。

于 2013-01-07T16:04:21.693 回答