Visual Studio 용 사용자 지정 테스트 유형을 구현했습니다. 사용자 정의 테스트 유형은 dll에서 테스트 요소를 읽습니다. 내 ITip 구현은 매력처럼 작동합니다. 테스트 요소가로드되고 테스트 뷰 도구 창에 표시됩니다.Visual Studio 용 사용자 지정 테스트 유형을 실행할 때 FileNotFound 문제 해결
테스트 요소를 선택하고 실행하면 실행되지 않음 상태가됩니다. 이 문제를 디버깅하는 동안 QTAgent32.exe에서 FileNotFoundException이 발생한다는 것을 알았습니다. 그것은 그것이 테스트 케이스를 정의하는 DLL을 찾을 수 없다는 것을 알려줍니다. 또한, 내 TestAdapter.Initialize 메서드가 호출되기 전에 실패합니다. 내 테스트 DLL을 Visual Studio의 PrivateAssemblies 디렉토리에 복사했습니다. 내가 할 때 내 테스트 요소가 통과합니다. 내 사용자 지정 테스트 어댑터에서 코드를 디버깅 할 수도 있습니다. 그래서이 모든 것의 의미는 QTAgent32.exe가 원래 디렉토리에서 테스트 DLL을 찾을 수 없다는 것입니다.
내 질문에 QTAgent32가 원래 디렉토리에 내 테스트 DLL을 찾으려면 어떻게해야합니까? 완료를 위해 필자는 Tip Load 메서드 코드를 추가합니다 :
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;
}
질문을 항상 강조 표시하여 요점을 매우 빨리 이해할 수 있습니다. –
@Venkat - 강조 표시는 무엇입니까? 대담하게 만드시겠습니까? – Ikaso