我使用MS Fakes创建了一个课程。这个类被注入到另一个没有存根的类中:
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'
ClassA中GetEmployee的签名
public Employee GetEmployee(int empId)
任何想法我做错了什么?
答案 0 :(得分:1)
您需要确保您的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:
var b = new StubIClassA()
{
GetEmployeeInt32 = (val) => new StubEmployee()
};