Pourquoi Faskes exécute-t-il une méthode réelle?
-
22-12-2019 - |
Question
J'ai placé une classe à l'aide de Mme Fakes.Cette classe est injectée dans une autre classe qui n'est pas stupéfiante:
var stubClassA = new MyNamespace.Fakes.StubClassA();
ClassB classB = new ClassB(stubClassA);
classB.DoSomething(10);
Quand j'arrive dans Classb.Dosomething (), l'instance de classe est là et je peux le voir est correctement basse.
dans classb.Dosomething (int empid)
classA.GetEmployee(empId);
Ce qui précède fait un véritable appel à CLASSA.GETTEMPOSBYEE ().Ne devrait-il pas simplement renvoyer NULL et ne pas essayer d'exécuter le code réel?
J'ai essayé de balancer getemployere ():
stubClassA.GetEmployee = (value) => new Employee();
Mais cela jette l'erreur de la compilation:
Cannot assign to 'GetEmployee' because it is a 'method group'
Signature de Getemployee à CLASSA
public Employee GetEmployee(int empId)
Des idées ce que je fais mal?
La solution
Vous devez vous assurer que votre CLASSA implémente une interface, de sorte que MS Fakes puisse mettre en œuvre un talon.
Un petit exemple que j'ai jeté ensemble:
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);
}
}
}
MAINTENANT VOUS POUVEZ SUPPLIQUER CLASSA COMME SO:
var b = new StubIClassA()
{
GetEmployeeInt32 = (val) => new StubEmployee()
};