가짜가 실제 방법을 실행하는 이유는 무엇입니까?
-
22-12-2019 - |
문제
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()
};
. 제휴하지 않습니다 StackOverflow