Pregunta

He aplastado una clase con MS Fakes.Esta clase se inyecta en otra clase que no está sucedida:

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

Cuando entro en Classb.Dosomething (), la instancia de CLASSA está ahí y puedo ver que está correctamente intencional.

en classb.dosomething (int empid)

classA.GetEmployee(empId);

Lo anterior hace una llamada real a ClassA.GetEmployEETE ().¿No debería simplemente regresar nulo y no intentar ejecutar el código real?

Lo intenté para Stust GetEmployee ():

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

Pero tira el error de tiempo de compilación:

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

Firma de GetEmpleado en ClassA

public Employee GetEmployee(int empId)

¿Alguna idea de lo que estoy haciendo mal?

¿Fue útil?

Solución

Debe asegurarse de que su CLASSA implemente una interfaz, de modo que las falsificaciones de MS puedan implementar un trozo para ello.

Un pequeño ejemplo que vomité juntos:

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);
        }
    }
}

Ahora puede resistir a Classá así:

var b = new StubIClassA()
{
    GetEmployeeInt32 = (val) => new StubEmployee()
};

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top