Pergunta

Eu esbocei uma classe usando MS Fakes.Esta classe é injetada em outra classe que não está em stub:

var stubClassA = new MyNamespace.Fakes.StubClassA();
ClassB classB = new ClassB(stubClassA);
classB.DoSomething(10);

Quando entro em classB.DoSomething(), a instância classA está lá e posso ver que ela está em stub corretamente.

Na classeB.DoSomething(int empId)

classA.GetEmployee(empId);

O texto acima faz uma chamada real para classA.GetEmployee().Isso não deveria apenas retornar nulo e não tentar executar o código real?

Eu tentei stub GetEmployee():

stubClassA.GetEmployee = (value) => new Employee();

mas gera o erro de tempo de compilação:

Cannot assign to 'GetEmployee' because it is a 'method group'

Assinatura de GetEmployee na Classe A

public Employee GetEmployee(int empId)

Alguma idéia do que estou fazendo de errado?

Foi útil?

Solução

Você precisa garantir que sua ClassA implemente uma interface, para que o MS Fakes possa implementar um stub para ela.

Um pequeno exemplo que juntei:

namespace TestLib
{
    public class Employee
    {
        public int Id;
    }

    public interface IClassA
    {
        Employee GetEmployee(int empId);
    }
    public class ClassA : IClassA
    {
        public Employee GetEmployee(int empId)
        {
            return new Employee(){Id = empId};
        }
    }

    public class ClassB
    {
        private IClassA _classA;

        public ClassB(IClassA a)
        {
            this._classA = a;
        }

        public void DoSomething(int id)
        {
            _classA.GetEmployee(id);
        }
    }
}

Agora você pode eliminar ClassA assim:

var b = new StubIClassA()
{
    GetEmployeeInt32 = (val) => new StubEmployee()
};
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top