2012-10-06 2 views
-1

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

Код

У меня есть следующий интерфейс

public interface IViewFolderReference 
{ 
    string FolderName { get; set; } 
} 

Расширение

public static ICollection<TFile> GetFiles<TFile>(this IViewFolderReference view) 
    where TFile: class, IFile 
{ 
    var folder = view.GetFolder(); 
    return folder.Exists ? 
     Mapper.Map<ICollection<TFile>>(folder.GetFiles()) 
     : null; 
} 

Concret класс

public class ProcessoViewModel : IViewFolderReference 
{ 
    public string FolderName { get; set; } 
    public ICollection<File> Arquivos { get; set; }  
    ... 
} 

Метод испытания

[TestMethod] 
public void Ao_salvar_processo_adicionar_dois_itens() 
{ 
    // Arrange 
    var vm = new Mock<ProcessoViewModel>(); 
    vm.Object.Arquivos = new List<File>() { 
     new File { FileName = "Arquivo 1.jpg", DisplayName = "Arquivo 1" } 
     ,new File { FileName = "Arquivo 2.doc", DisplayName = "Arquivo 2" } 
    }; 

    //Act 
    controller.salvar(vm.Object); // Problem here!! (GetFiles is called, How can mock the result??) 

    //Assert 
    var processoDb = repositorio.Query<Processo>().SingleOrDefault(p => p.Imovel == vm.Object.Imovel && vm.Object.DataEntrada == p.DataEntrada); 
    Assert.IsNotNull(processoDb.Arquivos); 
    Assert.AreEqual(processoDb.Arquivos.Count, 2); 
} 
+2

Что вы хотите сказать? – Sklivvz

+0

См. Метод тестирования - >> // Проблема здесь! (Вызывается метод GetFiles, как можно издеваться над результатом?) – ridermansb

ответ

2

Если вы используете VS 2010, вы можете использовать Moles для моделирования методов расширения (поскольку они являются просто статическими методами с использованием первого параметра). Один пример here. В VS 2012 вы можете использовать Microsoft Fakes.

+0

Я не знаю, Moles, Я изучу его. У этой цели есть мок? – ridermansb

+0

Не совсем. Moq предназначен для использования как простой способ настройки mocks для виртуальных/абстрактных методов. Мольс - лишняя миля, позволяющая вам издеваться над статическими классами, методами и прочими классными вещами. –

+0

Microsoft Fakes доступен только на VS2012 Ultimate ... но это решение спасибо. – ridermansb

0

Похоже, что вам действительно нужно, чтобы дразнить является view.GetFolder() с удобным интерфейсом, который позволяет издеваться folder.GetFiles(). Таким образом, метод расширения GetFiles выполняется, но в конечном итоге издевается над реализацией базового интерфейса. Это соответствует тому, как должно насмехаться. Если у вас уже есть тест для метода расширения GetFiles, нет вреда при вызове его во время теста для чего-то другого.

+0

Доступ к методу 'GetFolder'' ConfigurationManager.AppSettings [keyAppConfig + "Folder"] 'и создает каталог с использованием класса' DirectoryInfo'. ** Я бы этого не сделал. ** Ошибка при попытке доступа к web.config ('ConfigurationManager.AppSettings [keyAppConfig +" Folder "]') в методе 'GetFolder' – ridermansb

Смежные вопросы