我已经使用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()
};
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top