说我有接口
public interface IVehicle<T>
{
string Drive();
string Stop();
}
还有两个类Car()和Aeroplane()
每个类都有一个使用该界面执行操作的类
public class CarActions : IVehicle<Car>
{
public string Drive()
{
return "Go";
}
public string Stop()
{
return "Stop";
}
}
和
public class AeroplaneActions : IVehicle<Aeroplane>
{
public string Drive()
{
return "Go";
}
public string Stop()
{
return "Stop";
}
public virtual string Fly()
{
return "Fly";
}
}
当我模拟Airplane类时,因为它不是接口的一部分,所以找不到fly()方法
Mock<AeroplaneActions> mockedDirectly = new Mock<AeroplaneActions>();
mockedDirectly.Setup(method => method.Drive()).Returns("Drive");
mockedDirectly.Setup(method => method.Stop()).Returns("Stop");
mockedDirectly.Setup(method => method.Fly()).Returns("Fly");
我尝试直接模拟确实起作用的Actions类,但是在这种情况下,我需要避免将方法更改为虚方法。
Mock<AeroplaneActions> mockedDirectly = new Mock<AeroplaneActions>();
mockedDirectly.Setup(method => method.Drive()).Returns("Drive");
mockedDirectly.Setup(method => method.Stop()).Returns("Stop");
mockedDirectly.Setup(method => method.Fly()).Returns("Fly");
我想知道除使用虚拟方法外,还有其他替代方法吗?
答案 0 :(得分:1)
也许您可以为AeroplaneActions
创建另一个接口,该接口将从IVehicle<T>
继承并具有Fly
方法,例如像这样:
public interface IAeroplane<T> : IVehicle<T>
{
string Fly();
}.
然后类AeroplaneActions
将实现此接口:
AeroplaneActions : IAeroplane<Aeroplane>
然后应该可以模拟此接口:
var mock = new Mock<IAeroplane<Aeroplane>>().