К сожалению, MSTest не имеет встроенного механизма для этого, и изменения в приложении политики CAS в .NET 4.0 серьезно ограничивают поддерживаемые подходы для этого.
Простейшим подходом к этому было бы ограничение разрешения CAS для AppDomain, созданного MSTest для запуска тестов в конкретной тестовой сборке. Однако текущие версии MSTest не позволяют перехватывать и / или настраивать создание домена приложения. Мы не можем обойти это, добавив код в метод AssemblyInitialize, поскольку изменения политики AppDomain, сделанные после запуска кода в AppDomain, не действуют.
Это в основном оставляет нам единый поддерживаемый механизм для применения ограничений разрешений CAS для тестирования: применение PermissionSet.PermitOnly из метода тестирования или кода, который вызывает метод тестирования. e.g.:
[TestMethod]
public void SomeTest()
{
SomeStaticTestUtilityClass.TargetPermissionSet.PermitOnly();
// Run the rest of your test code here.
}
Это может быть возможно сделать с помощью пользовательских атрибутов теста, используя подход, описанный в http://blogs.msdn.com/b/vstsqualitytools/archive/2009/09/04/extending-the-visual-studio-unit-test-type-part-1.aspx. Однако я не проверял это, и я не уверен, позволил ли механизм вызова метода теста применить PermitOnly таким образом, чтобы он присутствовал в стеке вызовов для тестируемого кода.
Если у вас их много для создания и использования собственного ITestMethodInvoker, либо он не работает, либо не подходит по-другому, другой вариант - использовать посткомпилятор, такой как PostSharp , чтобы вставить PermitOnly вызовов.
Если ничего из этого не подходит, и вы не состоите в браке с MSTest, вы также можете рассмотреть возможность изменения своей тестовой среды на более легко расширяемую.