以下のシナリオでは、抽象基本クラス メソッドのテスト ケースを作成する必要があります。
public abstract class baseclass{
public bool MyBaseMethod(){
if(User.Identity.IsAuthenticate)
{.....}
}
}
public class deriveclass: baseclass{
}
私のテストフィクスチャクラスには、次のようなテストメソッドがあります。
[Test]
public void MyBaseMethodtest()
{
SetUserIdentity(true);
var obj = new deriveclass();
var result = obj.MyBaseMethod();
//test cases follows
..........
}
private void SetUserIdentity(bool login = false)
{
var identity = new Mock<ClaimsIdentity>() { DefaultValue = DefaultValue.Mock };
if (login)
{
identity.Setup(p => p.IsAuthenticated).Returns(true);
}
var principal = new ClaimsPrincipal(identity.Object);
var httpContext = new Mock<HttpContextBase> { DefaultValue = DefaultValue.Mock };
httpContext.SetupGet(x => x.User).Returns(principal);
controller.ControllerContext = new ControllerContext(httpContext.Object, new RouteData(), controller);
}
しかし、 MyBaseMethod を参照しようとすると、 User オブジェクトに対して null 参照エラーが発生します。基本クラスではなく派生クラスのコントローラーコンテキストを設定しているため、これが起こっていると思います。同様のシナリオをグーグルで検索しようとしましたが、見つかりませんでした。