FAKEKはなぜ実法を実行しますか?
-
22-12-2019 - |
質問
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()
};
. 所属していません StackOverflow