如何使用MOQ模拟通用抽象类?

时间:2015-04-14 09:33:18

标签: unit-testing moq

我在模拟界面时非常有经验,这是我第一次尝试模拟Generic Abstract类。我正在更新以前的开发人员已经处理过的代码,并且已经辞职了。我正在尝试使用MOQ模拟一个通用抽象类,代码如下

public abstract class AbstractView<TView, TTranslation, TProperty, TPropertyView> : TranslatableEntity<TTranslation>, IView
        where TView : IView, new()
        where TTranslation :  ITranslation 
        where TProperty : BaseEntity, IProp
        where TPropertyView : AbstractPropertyView<TView,TProperty>, new() 
    {

我在StackOverflow中看到过这个,但是当我尝试它时它似乎无法正常工作

StackOverflow Solution

当我尝试上面的那个时,我得到错误的类型参数数量错误。

我问过这里的一些人,他们也没有任何线索。任何人都可以教我如何模拟这样一个抽象类?

提前致谢

1 个答案:

答案 0 :(得分:0)

嗯,你没有显示你真正的模拟代码,但你可以嘲笑这个类很好。

这是一个例子。给出以下接口/类:

public interface IView {}

class DummyView : IView { }
public interface ITranslation { }
public interface IProp { }
public class BaseEntity : IProp {}
public class AbstractPropertyView<TView,TProperty> { }
public abstract class TranslatableEntity<TTranslation> { }

public abstract class AbstractView<TView, TTranslation, TProperty, TPropertyView> : TranslatableEntity<TTranslation>, IView
        where TView : IView, new()
        where TTranslation :  ITranslation 
        where TProperty : BaseEntity, IProp
        where TPropertyView : AbstractPropertyView<TView,TProperty>, new() 
{
    public abstract int Foo();
}

您可以将其模拟为简单(?):

var mock = new Mock<AbstractView<DummyView, ITranslation, BaseEntity, AbstractPropertyView<DummyView, BaseEntity>>>();
mock.Setup(m => m.Foo()).Returns(5);