Как написать модульный тест для этого метода в моей модели представления в Silverlight без SecurityException? - PullRequest
1 голос
/ 26 сентября 2010

У меня есть проект тестирования Silverlight, использующий Silverlight Unit Test Framework .

Я хочу протестировать метод в моей модели представления, который принимает объекты FileInfo. Кажется, это работает нормально, когда я тестирую его вручную через пользовательский интерфейс.

Теперь я хочу модульное тестирование только для метода AddDocument. Я не хочу проверять фактическое нажатие кнопки или имитировать нажатие кнопки - я просто хочу проверить этот метод AddDocument.

Вот код, показанный сзади. Объект mySessionViewModel находится в DataContext. Метод, который я хочу проверить, это mySessionViewModel.AddDocument ();

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    OpenFileDialog openFileDialog1 = new OpenFileDialog();

    openFileDialog1.Filter = 
        "Text Files (.txt)|*.txt|All Files (*.*)|*.*";
    openFileDialog1.FilterIndex = 1;

    openFileDialog1.Multiselect = true;

    bool? userClickedOK = openFileDialog1.ShowDialog();

    if (userClickedOK == true)
    {
        IList<FileInfo> files = new List<FileInfo>();
        foreach (FileInfo file in openFileDialog1.Files)
        {
            mySessionViewModel.AddDocument(file);
        }
    } 
}

Я поместил несколько тестовых файлов в подкаталог веб-проекта и попробовал это, но он выдает исключение SecurityException, соответствующее модели безопасности Silverlight:

SessionView sessionViewModel = new SessionViewModel();

DirectoryInfo di = new DirectoryInfo("testFiles");
var files = di.EnumerateFiles();
foreach (var file in files)
{
    sessionViewModel.AddDocument(file);
}

// assert some stuff

Ответы [ 2 ]

2 голосов
/ 26 сентября 2010

Основная проблема здесь в том, что вы хотите выполнить модульное тестирование метода, который принимает FileInfo в качестве параметра.Однако не существует автоматического способа создания экземпляра FileInfo.

. Поэтому для модульного тестирования этого метода вы должны рассмотреть возможность изменения типа параметра.Весьма вероятно, что внутренности этого метода имеют доступ только к нескольким свойствам и методам FileInfo.Следовательно, создайте интерфейс, который представляет эти члены, и измените метод для использования интерфейса вместо FileInfo.

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

2 голосов
/ 26 сентября 2010

Модель безопасности Silverlight не разрешает доступ к файлу, если это не через диалог открытия файла (это для браузера).

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

Возможность чтения внешних файлов на самом деле не требует автоматического тестирования.Один интерактивный тест пользовательского интерфейса доказал бы это.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...