Вопрос

Мне нравится иметь возможность управлять MSTST в частичном доверии. Это позволило бы мне настроить код, который звонит в модель, может и не может сделать.

Проблема, которую я пытаюсь решить, состоит в том, чтобы позволить моим автоматизированным (единичным) тестам, когда используются такие вещи, как файловая система, база данных, системные часы и другие внешние ресурсы. Запустившись в частичном доверии, я могу настроить, какие действия могут и не могут делать приложение. Это позволяет мне обнаружить места в коде, которые неправильно абстрагируют используемые ресурсы.

Если есть и другие способы достижения этого, пожалуйста, дайте мне знать.

Это было полезно?

Решение

К сожалению, MSTest не имеет встроенного механизма для этого, и изменения в применении политики CAS в .NET 4.0 сильно ограничили поддерживаемые подходы для этого.

Самый простой подход к этому будет ограничение гранта разрешений CAS на AppDomain, созданном MSTest для запуска тестов в конкретной тестовой сборке. Однако текущие версии MSTest не позволяют перехватить и/или настройку создания AppDomain. Мы не можем обойти это, добавив код в метод Assemblyinialize, поскольку изменения политики AppDomain, сделанные после начала работы кода в AppDomain, не имеют никакого эффекта.

Это в основном оставляет нас с одним поддерживаемым механизмом для применения ограничений разрешений CAS для тестирования: применение разрешения. например:

[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/exting-the-visual-studio-unit-test-type-part-1.aspx. Анкет Тем не менее, я не проверял это, и я не уверен, что механизм вызовов метода испытаний позволит применять пропускание способом, что это приведет к тому, что он будет присутствовать в стеке вызовов для тестируемого кода.

Если у вас есть много из них для автора, и использование пользовательского Itestmethodinvoker либо не работает, либо иначе не подходит, другой вариант-использовать посткомпилятор Postsharp Чтобы вставить разрешенные звонки.

Если ничего из этого подходит, и вы не женаты на MSTest, вы также можете рассмотреть вопрос о изменении своей тестовой структуры на тот, который легче расширить.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top