Модульное тестирование модели безопасности ClickOnce - PullRequest
4 голосов
/ 03 января 2011

Я пытаюсь установить приложение через ClickOnce - с определенными минимальными разрешениями.Я хочу провести модульное тестирование, чтобы подтвердить, что мое приложение не использует никаких дополнительных функций, запрещенных требуемой политикой безопасности.

Могу ли я в своем модульном тесте указать, что я хочу использовать указанный манифест для регулирования разрешений,делать звонки в мою библиотеку, а затем утверждать, что исключения безопасности не генерируются?

Если да, то как?

Спасибо!

1 Ответ

0 голосов
/ 03 января 2011

Если вы хотите провести модульное тестирование (тестирование в изоляции), вам нужно

  • разрешение на проверку логики, и вы должны
  • проверка того, что ваше контрольное устройство (то есть MVVM) использует логику разрешений.

Проверка SecurityManager для разрешения Logic

вы можете извлекать allowLogic для собственного класса с помощью методов

public class SecurityManager
{
 bool IsAllowedToPrint(User user);
 bool IsAllowedToAdminister(User user);
}

тогда вы пишете модульные тесты

 User user = CreateAdimistrator();
 Assert.AreEqual(true, securityManager.IsAllowedToAdminister(user));

Contrologic (т.е. MVVM) использует логику разрешений

создать mock-SecurityManager, который всегда разрешает / запрещает работу. и запишите юнит-тесты для контроллера, если он реагирует так, как ожидалось.

var allowEverythingMock = CreateSecurityManagerMockThatAllowsEverything();
var mvvm = CreateMvvm(allowEverythingMock );
Assert.IsNotNull(mvvm.GetAdminGui());

Я не уверен, есть ли простой способ создать интеграционный тест, в котором Click-Once-App фактически использует настоящий SecurityManager и результат проверяется.

Обновление после получения дополнительной информации о цели

написать юнит-тесты для контроллера, если он реагирует так, как ожидалось.

var controller = CreateCreate(Permission.Low);

try
{
   // File io is not allowed with low permissions
   controller.SaveTextAsFile("HellowWorld", @"c:\temp\UnittestResult.txt");
   Assert.Fail("The Controller should have forbidden this");
} catch(PermissionException pex) {
   // everything is ok. This specific exception was expected.
}
...