У меня есть класс QuickController, который наследуется от BaseController. Метод в QuickController вызывает свойство на BaseController, которое имеет зависимость от ConfigurationManager.AppSettings.Протестируйте метод с зависимостью от базового свойства
Я хочу модульный тест QuickController, но не могу найти способ избавиться от этой зависимости. Вот мой тест:
[TestMethod]
public void TestMethod1()
{
var moqServiceWrapper = new Mock<IServiceWrapper>();
var controller = new QuickController(moqServiceWrapper.Object);
//Act
var result = controller.Estimator(QuickEstimatorViewModel);
//Assert
Assert.IsInstanceOfType(result, typeof(ViewResult));
}
QuickController класс
public class QuickController : BaseController
{
public QuickController(IServiceWrapper service)
: base(service) { }
public ActionResult Estimator(QuickEstimatorViewModel viewModel)
{
viewModel.RiskAddressLocation = RiskAddressLocation;
....
return View("QuickQuote", viewModel);
}
}
И свойство BaseController
public RiskAddressLocation RiskAddressLocation
{
get { return ConfigurationManager.AppSettings["..."]
.ToEnum<RiskAddressLocation>(true); }
}
Я также пытался вызвать метод на FakeQuickController что унаследовать от QuickController, но может» t переопределяет свойство, это тот, который всегда вызывается в BaseController.
Есть ли что-нибудь, что я могу здесь сделать?
Update
От принятого ответа здесь, что я имел, что VS2013 не нравится
public class BaseController{
public virtual RiskAddressLocation RiskAddressLocation {get{...;}
}
public class QuickController : BaseController{}
public class FakeQuickController : QuickController{
public override RiskAddressLocation RiskAddressLocation
{
get { return ...} // Doesn't compile (cannot override because
//BaseController.RiskAddressLocation' is not a function
}
}
Это, однако, работает отлично
public class BaseController{
public virtual RiskAddressLocation RiskAddressLocation(){...}
}
public class QuickController : BaseController{}
public class FakeQuickController : QuickController{
public override RiskAddressLocation RiskAddressLocation()
{
return ... ;
}
}
Похоже, вы хотите [mock ConfigurationManager] (http://stackoverflow.com/questions/9486087/how-to-mock-configurationmanager-appsettings-with-moq), а не пытаться издеваться над базой? – CodingIntrigue
Достаточно справедливо @RGraham, но как перехватить RiskAddressLocation в базовом классе, чтобы он мог его издеваться? – kooshka