문제

MS Fake를 사용하여 수업을 던져졌습니다.이 클래스는 스텁되지 않은 다른 클래스에 주입됩니다.

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

classb.doSomething ()에 들어가면 Classa 인스턴스가 있고 올바르게 스텁되어있는 것을 볼 수 있습니다.

classb.doSomething (int eMpid)

classA.GetEmployee(empId);
.

위의 Classa.getEmployee ()에 대한 실제 호출을 수행합니다.NULL을 반환하고 실제 코드를 실행하려고하지 않아야합니까?

나는 GetEmployeeee ()를 스텁하려고 시도했습니다.

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

그러나 컴파일 시간 오류가 발생합니다.

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

Classa의 GetEmployee의 서명

public Employee GetEmployee(int empId)
.

내가 뭘 잘못하고 있는지 아이디어

도움이 되었습니까?

해결책

Classa가 인터페이스를 구현하여 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);
        }
    }
}
.

이제 Classa를 그렇게 s :

와 같은 스텁 밖으로 옮길 수 있습니다.
var b = new StubIClassA()
{
    GetEmployeeInt32 = (val) => new StubEmployee()
};
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top