次のようなコントローラークラスがあるとします。
public class ResourceController : AuthorizedController
{
public virtual string Resource()
{
//do magic
}
public virtual string ResourceParent()
{
var url = Resource();
return url;
}
}
}
テスト ハーネスの場合:
[Subject(typeof (ResourceController))]
public class When_I_want_the_parent_resource : WithSubject<ResourceController>
{
private static readonly string ParentUrl = "/organizations/1";
private static readonly string ResourceUrl = "/organizations/1/contacts/1";
private static string _result;
private Establish context = () =>
{
The<ResourceController>()
.WhenToldTo(x => x.Resource())
.Return(ResourceUrl);
};
private Because of = () => _result = Subject.ResourceParent();
private It should_match_the_expected_parent_url = () =>
_result.ShouldEqual(ParentUrl);
}
Machine.Fakes がこのメソッドを自動モック化したために Subject.ResourceParent() が null を返すため、この単体テストは失敗します。一時的な回避策として、コードをテストできるように、ResourceParent から virtual キーワードを削除しました。Machine.Fakes にオーバーライドしないように指示するには、実際の解決策が必要だと思いますResourceParent()