В настоящее время я пишу структуру модульного тестирования, которая в конечном итоге должна запускать стандартные модульные тесты, написанные в Visual Studio. В настоящее время Framework неправильно работает с методами доступа. Рассмотрим следующий метод тестирования:
[TestMethod()]
public void TestMethod()
{
ExampleMethods_Accessor target = null;
target = new ExampleMethods_Accessor();
target.SomeMethod();
}
В этом примере средство доступа было создано Visual Studio. Модульный тест отлично работает при запуске с использованием среды модульного тестирования Visual Studio. Однако я хотел бы вызвать TestMethod() из моего Framework. В строке «target = new ExampleMethods_Accessor()» возникает следующее исключение:
Инициализатор типа для "Proband.ExampleMethods_Accessor" вызвал исключение.
Внутреннее исключение:
Не удалось загрузить файл или сборку: пробанд, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null...
Кто-нибудь знает, как Microsoft Unit Testing Framework вызывает модульные тесты? Я думал, что это может быть связано с отсутствующим объектом TestContext. В моем случае это "ноль". При запуске модульного теста в Visual Studio объект TestContext содержит много информации. Может быть, мне нужно правильно его инициализировать? Как его нужно инициализировать?
Спасибо за помощь, Кристиан
ИЗМЕНИТЬ:
Я продолжал экспериментировать с тем, как работают средства доступа. Я использовал ILSpy, чтобы увидеть, какой код генерируется в Proband_Accessor.dll. Оказывается, инструкция, вызывающая исключение:
SomeClass_Accessor.m_privateType = new PrivateType("Probant, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Probant.SomeClass");
Я изменил свой код модульного теста, чтобы он был таким (только для теста):
[TestMethod()]
[DeploymentItem("Proband.dll")]
public void SomeMethodTest()
{
ExampleMethods_Accessor target = null;
ExampleMethods c = null;
try
{
Assembly.Load("Proband, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"); // this works fine
PrivateType tx = new PrivateType(typeof(ExampleMethods)); // this works fine as well (also without loading the assembly)
PrivateType t = new PrivateType("Proband, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Proband.ExampleMethods"); // this causes the exception
c = new ExampleMethods(); // this works fine
target = new ExampleMethods_Accessor(); // this causes the exception as well
}
catch (Exception ex)
{
Console.WriteLine();
}
int actual;
actual = target.SomeMethod();
}
Я совершенно не понимаю, почему "new PrivateType("Proband, Version...." не работает. Есть идеи?
Proband
и как вы пытались сделать ее доступной? - person Jon Skeet   schedule 10.10.2011