运行时的装配位置更改

时间:2012-12-27 15:26:04

标签: c# assemblies custom-attributes coded-ui-tests

我正在运行编码的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. 为什么同一组件的位置会发生变化?

1 个答案:

答案 0 :(得分:0)

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

在此属性所在的类中放置System.Diagnostics.Debugger.Break()时,从 MSTest.exe 调用了抖动,但当此断点位于使用此属性修饰的testmethod中时, QTAgent32.exe 被调用。我已经实现了一个单例类来处理我的参数,当它被MSTest在这个属性的ExternalDataSource中填充时,当进入QTAgent32(测试)时它是空的。

对我有用的解决方案就是用[TestInitialize()]上的数据初始化Singleton。

希望这有助于某人。