ControllerクラスのActionメソッドが呼び出すときに、ベースクラスにメソッドが存在することが必要です。NSubstitueフレームワークを使用してControllerクラスからベースメソッドをモックする方法
以下は私のコントローラクラスです。アクションメソッドIndex()
は、基本メソッドGetNameNodeStatus()
を呼び出します。では、というアクションメソッドがNsubstitute mockingフレームワークを使用して呼び出すとき、基本クラスにあるGetNameNodeStatus()
をどのようにモックできますか?ここで
using Cluster.Manager.Helper;
using Cluster.Manager.Messages;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
namespace Cluster.Manager
{
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
ClusterMonitoring monitoring = new ClusterMonitoring();
string getStatus = monitoring.GetNameNodeStatus("", new Credential());
return View();
}
}
}
は私の基本クラスはClustermonitoring
namespace Cluster.Manager.Helper
{
public class ClusterMonitoring
{
public virtual string GetNameNodeStatus(string hostName, Credential credential)
{
return "Method Not Implemented";
}
}
}
されており、ここに私のテストクラス
namespace NSubstituteControllerSupport
{
[TestFixture]
public class UnitTest1
{
[Test]
public void ValidateNameNodeStatus()
{
var validation = Substitute.ForPartsOf<ClusterMonitoring>();
validation.When(actionMethod => actionMethod.GetNameNodeStatus(Arg.Any<string>(), Arg.Any<Credential>())).DoNotCallBase();
validation.GetNameNodeStatus("ipaddress", new Credential()).Returns("active");
var controllers = Substitute.For<HomeController>();
controllers.Index();
}
}
}
メソッドでClusterMonitoringが手動で作成されています。つまり、それを置換することはできません。コントローラに依存関係として 'ClusterMonitoring'を注入する必要があります。 – Nkosi