[英]Accessing virtual method from abstract class using repository pattern
我一直在理解 - 如何访问和使用(或者甚至可以使用)基类虚拟方法。
所以代码是: 基类:
public abstract class Vehicle
{
public string VehicleIdentificationNumber { get; set; }
public string Make { get; set; }
public string Model { get; set; }
public abstract string DisplayName { get; }
public virtual bool HasAnAmazingColor(){
}
}
存储库模式:
public class VehicleRepository : IVehicleRepository, ICollection
{
private readonly List<Vehicle> _vehicles;
public int Count => _vehicles.Count;
public object SyncRoot => ((ICollection)_vehicles).SyncRoot;
public bool IsSynchronized => ((ICollection)_vehicles).IsSynchronized;
public void CopyTo(Array array, int index)
{
((ICollection)_vehicles).CopyTo(array, index);
}
public IEnumerator GetEnumerator()
{
return ((ICollection)_vehicles).GetEnumerator();
}
public VehicleRepository(List<Vehicle> aVehicles)
{
_vehicles = aVehicles;
}
然后 int unittest 我尝试获取虚拟方法,但知道我不理解某些东西,但无法弄清楚是什么,如何在不覆盖它的情况下使用该方法?
[TestClass()]
public class VehicleRepositoryTests
{
private VehicleRepository vehicleList = new VehicleRepository(new List<Vehicle>());
[TestMethod()]
public void HasAmazingColor()
{
//arrange
//act
vehicleList.??? -- I'm missing something
//assert
}
我可以在任何实现 Vehicle 的派生类中访问虚方法,但是有没有办法在存储库模式中使用它?
好吧,您有抽象的基本调用Vehicle
。
通过仔细观察你的代码,我发现你没有从Vehicle
派生出你的VehicleRepository
类。
因此,您将无法从VehicleRepository
实例上的Vehicle
访问虚拟方法。
您正在寻找的方法HasAmazingColor
将适用于List<Vehicle> _vehicles;
每个对象List<Vehicle> _vehicles;
也许您可以将车辆列表作为属性公开,然后在单元测试中使用它,以防万一您想使用它。
或者
如果您的设计不允许将_vehicles
公开为公共集合,那么您可以在VehicleRepository
类中有一个公共方法,该方法在适当的Vehicle
对象或多个对象上内部调用HasAmazingColor
方法。
解决方案将取决于您的应用程序设计。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.