3

I have implemented a custom test type for Visual Studio. The custom test type reads its test elements from dlls. My ITip implementation is working like a charm. The test elements are loaded and are displayed on the Test View tool window.

When I select the test elements and run them they end up in a Not Executed status. While debugging this issue I found out that a FileNotFoundException is thrown from QTAgent32.exe. It tells me that it cannot find the dll that defines the test cases. Also, it fails before my TestAdapter.Initialize method is called. I copied my test dll to the PrivateAssemblies directory of Visual studio. When I do that my test elements pass. I can also debug the code in my custom test adapter. So, the meaning of all of this is that QTAgent32.exe cannot find my test dll in its original directory.

My question is what should I do to make QTAgent32 find my test dll in the original directory? For completenes I add my Tip Load method code:

public override ICollection Load(string location, ProjectData projectData, IWarningHandler warningHandler)
{
    Trace.WriteLine("Started RegexTestTip Load.");
    if (string.IsNullOrEmpty(location))
    {
        throw new ArgumentException("File location was not specified!", "location");
    }

    var fileInfo = new FileInfo(location);
    if (!fileInfo.Exists)
    {
        throw new ErrorReadingStorageException(
                string.Format("Could not find a file on the specified location: {0}", location));
    }
    var result = new List<ITestElement>();
    var extension = fileInfo.Extension.ToLower();
    if (extension != ".dll")
    {
        return result;
    }

    Assembly testAssembly = Assembly.LoadFrom(location);
    var testClasses = testAssembly.GetTypes().
        Where(t => Attribute.IsDefined(t, typeof(RegexTestClassAttribute)));

    foreach (Type testClass in testClasses)
    {
        PropertyInfo property = testClass.GetProperties().
            SingleOrDefault(p => Attribute.IsDefined(p, typeof(TestedRegexAttribute)));
        if (property == null || !TestedRegexAttribute.Validate(property))
        {
            throw new InvalidDataInStorageException("A Regex test must define a Tested Regex property with type Regex");
        }
        var testCases = testClass.GetProperties().
            Where(p => Attribute.IsDefined(p, typeof(RegexTestCaseAttribute)));

        foreach (PropertyInfo testCase in testCases)
        {
            if (!RegexTestCaseAttribute.Validate(testCase))
            {
                throw new InvalidDataInStorageException("A test case property must return a String value.");
            }
            var testElement = new RegexTestElement(property, testCase);
            testElement.Storage = location;
            testElement.Name = testCase.Name;
            testElement.Description = "A simple description";
            testElement.ProjectData = projectData;
            result.Add(testElement);
        }
    }
    Trace.WriteLine("Finished RegexTestTip Load.");
    return result;
}
4

1 回答 1

1

您是否尝试过将 dll 与可执行文件放在同一目录中?原谅这一点很明显,但有时它是真正简单的事情会咬我们。但它在 GAC 中,对吗?

于 2013-06-16T06:23:54.313 回答