为什么假货执行真实的方法?
-
22-12-2019 - |
题
我已经使用MS假货存入了一个课程。此类注入另一个不是存根的类:
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,而不是尝试执行真正的代码?
我确实尝试存根getemployee():
stubClassA.GetEmployee = (value) => new Employee();
.
但它抛出了编译时间错误:
Cannot assign to 'GetEmployee' because it is a 'method group'
.
getemployee签名在classa
public Employee GetEmployee(int empId)
.
任何想法我做错了什么?
解决方案
您需要确保您的Classa实现接口,以便MS假货可以为其实现存根。
我一起扔的一个小例子:
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()
};
. 不隶属于 StackOverflow