Вопрос

Я окрашил класс, используя 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()
};
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top