.net 为什么假货执行真实的方法?
我用MS Fakes截短了一个类。该类被注入到另一个未存根的类中:.net 为什么假货执行真实的方法?,.net,unit-testing,c#-4.0,microsoft-fakes,.net,Unit Testing,C# 4.0,Microsoft Fakes,我用MS Fakes截短了一个类。该类被注入到另一个未存根的类中: var stubClassA = new MyNamespace.Fakes.StubClassA(); ClassB classB = new ClassB(stubClassA); classB.DoSomething(10); 当我进入classB.DoSomething()时,classA实例就在那里,我可以看到它是正确的 在B类中,DoSomething(int-empId) 上面对classA.GetEmploye
var stubClassA = new MyNamespace.Fakes.StubClassA();
ClassB classB = new ClassB(stubClassA);
classB.DoSomething(10);
当我进入classB.DoSomething()时,classA实例就在那里,我可以看到它是正确的
在B类中,DoSomething(int-empId)
上面对classA.GetEmployee()进行了真正的调用。这不应该只返回null而不尝试执行真正的代码吗
我确实尝试将GetEmployee()存根:
但它抛出编译时错误:
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:
var b = new StubIClassA()
{
GetEmployeeInt32 = (val) => new StubEmployee()
};
这会引发错误:无法初始化成员“GetEmployee”。它不是字段或属性。ClassA的定义是什么?
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()
};