Если вы хотите модульное тестирование (тест в изоляции) вы должны
- тест permissionLogic и вы должны
- теста, что ваш contrologic (т.е. MVVM) использует логику разрешения.
Тест SecurityManager для permissionLogic
вы можете извлечь permissionLogic в своем классе с методами
public class SecurityManager
{
bool IsAllowedToPrint(User user);
bool IsAllowedToAdminister(User user);
}
тогда вы пишете модульные тесты
User user = CreateAdimistrator();
Assert.AreEqual(true, securityManager.IsAllowedToAdminister(user));
Контролирующее средство (т.е. MVVM) использует логику разрешения
Создайте mock-SecurityManager, который всегда разрешает/запрещает функциональность. и напишите единичные тесты для контроллера, если он реагирует так, как ожидалось.
var allowEverythingMock = CreateSecurityManagerMockThatAllowsEverything();
var mvvm = CreateMvvm(allowEverythingMock);
Assert.IsNotNull(mvvm.GetAdminGui());
Я не уверен, если есть простой способ создать интеграционный тест, где Click-Once-App фактически использует реальный SecurityManager и результат получает проверяется.
Update после получения более подробной информации о том, что цель
тестов блока записи для контроллера, если он реагирует, как ожидался.
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.
}
Я не уверен, что следую за вами ... Мое приложение не имеет концепции пользователей, факт заключается в том, что он будет работать в контексте с низким разрешением и, следовательно, не может писать/читать файлы наугад и т. д. Я хочу убедиться, что с помощью модульных тестов я могу запустить свою программу с низкими разрешениями, описанными в манифесте приложения ... – Max
Я обновил свой пример. «Я хочу убедиться, что с помощью модульных тестов я могу запустить свою программу с низкими разрешениями, описанными в манифесте приложения». Поскольку вы отказываетесь от файловой системы/манифестации, вы ищете интеграционный тест не для unittest. Извините, у меня нет опыта написания тестов на основе манифеста-Click-Once-Integration – k3b
вы видели [testing-clickonce-applications?] (Http://stackoverflow.com/questions/730090/testing-clickonce-applications?) – k3b