質問

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'
.

getemployeのclassa

の署名
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()
};
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top