Унаследованный класс тестов из общей базы игнорируется в MSTest
При создании общего базового тестового класса в MSTest и наследовании от него я не могу запускать тесты всех наследующих классов.
![Unit test results]()
BaseDependencyPropertyFactoryTest находится в сборке Whathecode.PresentationFramework.Tests. Это общий базовый класс. (BaseDependencyPropertyFactoryTest <TTestClass> )
Обе сборки имеют тест, наследующий от этого базового класса, называемый DependencyPropertyFactoryTest. Весь унаследованный класс выполняет передачу определенного аргумента типа.
[TestClass]
public class DependencyPropertyFactoryTest
: BaseDependencyPropertyFactoryTest<ASpecificClass>
{
}
Кажется, что запускается только тест наследования, расположенный в той же сборке, что и базовый класс. Унаследованный тест в сборке Whathecode.PresentationFramework.Aspects.Tests, кажется, полностью игнорируется.
Что я делаю неправильно? По желанию я могу загрузить весь необходимый исходный код, но вам понадобится PostSharp для сборки аспектов.
В качестве теста я попытался добавить тест к унаследованному тестовому классу в сборке аспектов, который вызывает все тесты в базовом тестовом классе.
[TestMethod]
public void AllBaseTests()
{
ClrGetterSetterTest();
DependencyPropertyGetterSetterTest();
}
Это дает следующий результат. Как ни странно, этот тест выполнен! На данный момент это может работать как минимум для их запуска, но, конечно, я не хочу редактировать этот тест каждый раз, когда добавляю дополнительные тесты в базовый класс.
![Unit test results after edit]()
Почему эти базовые тесты пропущены, и почему указание "Прервано"?
Ответы
Ответ 1
Причина этого не связана с дженериками, но с тестами, которые находятся в разных сборках.
В предложении Microsoft Connect описывается проблема: "Тест Visual Studio (MSTest) и отсутствие поддержки наследования базовых классов, которые находятся в разных сборках" . Он помечен как "фиксированный", но, похоже, он еще не исправлен в Visual Studio 2010, возможно, его еще нужно освободить?
Существует одна интересная проблема:
Вы можете обойти эту проблему компиляция исходного файла, содержащего базовый класс во все тестовые проекты которые хотят извлечь из этой базы класс. Добавьте элемент как "ссылку", чтобы что вы не получаете множественные копии исходного файла для базы класс.
Это сработало для меня, и я не нашел обходного пути слишком уродливым.
Ответ 2
Ничего особенного, но другой способ решения проблемы путем вызова базовых методов:
public abstract class AccountBaseTest
{
protected abstract IAccountRepository GetAccountRepository();
public void _submitAccountToLMS_BlankAccount_NewLmsID()
{
Account account = new Account(GetAccountRepository());
account.FirstName = Faker.FirstName();
account.LastName = Faker.LastName();
account.SubmitToLms();
Assert.IsTrue(account.LmsID > 0);
}
}
[TestClass]
public class AccountIntegrationTest
{
protected override IAccountRepository GetAccountRepository()
{
return new AccountRepository();
}
[TestMethod]
public void SubmitAccountToLMS_BlankAccount_NewLmsID()
{
base._submitAccountToLMS_BlankAccount_NewLmsID();
}
}
Надеюсь, VS 2012 решит эту проблему....
Ответ 3
Стивен ответил на добавление исходного файла базового класса в качестве ссылки, а затем скомпилировал его в тестовую dll.
Однако, начиная с версии обновления 2013 2013 года, теперь существует концепция "Совлокального проекта", которая позволяет формализовать идею вытаскивания исходного кода из другого проекта в ваш проект, а затем компилировать их как один.
Вот что я сделал
- Создать новый проект "Совлокальные проекты"
- Переместить текущий базовый класс теста (и другие необходимые файлы) в общий проект
- Добавьте ссылку на общий проект из тестового проекта (подробнее об этом ниже)
- Скомпилировать, протестировать и быть веселым
По крайней мере, на обновлении VS2015 2, шаг 3 не так прямо, как я думаю, это должно быть. Per Этот ответ Visual Studio не предоставляет вам простой способ связать совлокальные проекты для тестирования проектов (go figure...). Это то, что я должен был сделать:
- Выгрузите файл .csproj,
- Щелкните правой кнопкой мыши и отредактируйте файл .csproj.
-
Пройдите до конца и добавьте это в начало группировки <Import ...>
(исправите путь и имя по мере необходимости, обязательно добавьте Label="Shared"
!):
<Import Project="..\SharedProject\SharedProject.projitems" Label="Shared" />
-
Сохраните и закройте файл
- Обновить проект
Ответ 4
Это исправлено и отправляется в версии 1.1.17:
Рамка: https://www.nuget.org/packages/MSTest.TestFramework/1.1.17
Адаптер: https://www.nuget.org/packages/MSTest.TestAdapter/1.1.17
Литература: