Почему подделки выполняют реальный метод?
-
22-12-2019 - |
Вопрос
Я окрашил класс, используя MS подделки.Этот класс вводится в другой класс, который не окрашивается:
var stubClassA = new MyNamespace.Fakes.StubClassA();
ClassB classB = new ClassB(stubClassA);
classB.DoSomething(10);
.
Когда я наступаю в Classb.doSomething (), экземпляр классов есть, и я вижу, что он правильно окрашивается.
в классном (INT Empid)
classA.GetEmployee(empId);
.
Приведенное выше делает реальный вызов Classa.getemployeryee ().Разве это не должно просто вернуть нулю и не пытаться выполнить реальный код?
Я попробовал заглушить Getemployeree ():
stubClassA.GetEmployee = (value) => new Employee();
.
Но это бросает ошибку времени компиляции:
Cannot assign to 'GetEmployee' because it is a 'method group'
.
Подпись Getemploye в Classa
public Employee GetEmployee(int empId)
.
Есть идеи, что я делаю не так?
Решение
Вам необходимо убедиться, что ваша класса реализует интерфейс, так что MS Fakes может реализовать для него заглушку.
Небольшой пример, который я бросил вместе:
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);
}
}
}
.
Теперь вы можете заглушить классику, как так:
var b = new StubIClassA()
{
GetEmployeeInt32 = (val) => new StubEmployee()
};
.