3
respostas

Mockando hard dependency

Bom dia,

gostaria de saber se existe alguma possibilidade para mockar hard dependency, como no exemplo abaixo. Gostaria que a Classe Foo fosse "substituida" por um mock, em tempo de teste.

     public class Bar    
    {
        private String resultadoProcesso = String.Empty;    
        public String executarAcao(String palavra) {
            Foo foo = new Foo();
            return foo.executarAcao(palavra);
        } 
    }

    [Test]
    public void TesteExecutaAcao() {
        Assert.AreEqual("foo", new Bar().executarAcao(palavra));
    }
3 respostas

Olá, Bruno!

Como você deve saber, a boa prática prega que se deve "programar para interfaces" para facilitar os testes de unidade. Eu sei que existe o Mockery para PHP, que faz mocking para "hard dependencies", mas em C# isso é mais difícil. Talvez a opção seja o NSubstitute (http://nsubstitute.github.io/help/creating-a-substitute/), mas mesmo assim permite "substituir" somente os métodos marcados como virtual na classe-alvo (todos os outros métodos continuam executando como na classe original).

Olá Marcelo,

obrigado pela dica. Meu problema maior é que não tenho o "controle" do código, seria necessário algo que interceptasse a criação de instâncias e substituisse por um mock. Mas de qualquer forma, obrigado pela dica =)

Olá Bruno, talvez o isolamento que tu precise o Fakes do Visual Studio Ultimate resolva, dê uma olha em https://msdn.microsoft.com/pt-br/library/hh549175.aspx

Procure exemplos usando o ShimsContext.Create() é bem interessante.