Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 为什么假货执行真实的方法?_.net_Unit Testing_C# 4.0_Microsoft Fakes - Fatal编程技术网

.net 为什么假货执行真实的方法?

.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

我用MS Fakes截短了一个类。该类被注入到另一个未存根的类中:

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()
};