Ich brauche eine Mock eine Methode in einer Basisklasse vorhanden, wenn eine Action-Methode in der Klasse Controller aufrufen.Wie mokiere ich eine Basismethode aus der Controller-Klasse mit dem Framework NSubstitute
Hier ist meine Controller-Klasse unten, ruft die Aktionsmethode Index()
die Basismethode GetNameNodeStatus()
auf. Nun, wie kann ich die GetNameNodeStatus()
in der Basisklasse mokieren, wenn die Aktionsmethode Index
ruft es mit den Nsubstitute Mocking Frameworks.
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();
}
}
}
Hier ist meine Basisklasse Clustermonitoring
namespace Cluster.Manager.Helper
{
public class ClusterMonitoring
{
public virtual string GetNameNodeStatus(string hostName, Credential credential)
{
return "Method Not Implemented";
}
}
}
Und hier ist mein Test-Klasse
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' wird in der Methode manuell erstellt. Dies bedeutet, dass das Ersetzen nicht möglich ist. Sie müssen 'ClusterMonitoring' als Abhängigkeit vom Controller einfügen. – Nkosi