Создать подкаталог с несанкционированным доступом (для модульного теста)

#c# #unit-testing #directoryinfo #unauthorizedaccessexcepti

#c# #модульное тестирование #directoryinfo #unauthorizedaccessexcepti

Вопрос:

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

Конечно, я хочу проверить, правильно ли он обрабатывает папки с несанкционированным доступом.

Другими словами: я подозреваю, что один из методов в тестовом классе вызовет DirectoryInfo.EnumerateDirectories , и я хочу убедиться, что папки с несанкционированным доступом пропущены.

Итак, мне нужно создать папку, к которой мой TestObject не имеет права доступа.

 [TestMethod]
[ExpectedException(typeof(SecurityException)]
public void HelpFileCollection_GetFiles_SkipsInaccessibleFolders()
{
    // Test: HelpFileCollection.GetFiles() will skip Folders that are not accessible
    // preparation: create a base Folder and a subfolder with limited security
    DirectoryInfo baseFolder = this.CreateTestFolder();
    DirectoryInfo subFolder = baseFolder.CreateDirectory(...      ??? 

    HelpFilderCollection testObject = new HelpFileCollection
    {
        RootFolder = baseFolder,
        IncludeSubFolders = true,
    }

    // Test: call GetFiles(); expect SecurityException
    testObject.GetFiles();
    Assert.Fail("HelpFileCollection.GetFiles() unexpectedly didn't throw SecurityException");
}
 

Что я должен сделать, чтобы сделать вложенную папку недоступной?

Ответ №1:

Пример создания папки, которая покажет вам ошибку «доступ запрещен» при вызове «EnumerateDirectories»,:

             DirectoryInfo baseFolder = new DirectoryInfo("D:\Test");
            DirectoryInfo subFolder = baseFolder.CreateSubdirectory("HelloWorld");
            var security = new System.Security.AccessControl.DirectorySecurity();
            security.AddAccessRule(new System.Security.AccessControl.FileSystemAccessRule(Environment.UserName, System.Security.AccessControl.FileSystemRights.FullControl, System.Security.AccessControl.AccessControlType.Deny));
            subFolder.SetAccessControl(security);
            //Get Access denied error
            subFolder.EnumerateDirectories();