C# 阻碍Moq模拟没有默认构造函数的抽象类?

C# 阻碍Moq模拟没有默认构造函数的抽象类?,c#,unit-testing,moq,C#,Unit Testing,Moq,我喜欢使用Moq的DefaultMock.Mock行为。现在我遇到了一个问题,在如此模拟的对象层次结构中,一个对象来自一个没有默认构造函数的抽象类。当有人试图获取这个对象时,我得到一个异常。有没有办法解决这种行为 一个简短的例子: //The abstract class public abstract class Abstract { protected Abstract(string foo) { } } //The mocked interface public

我喜欢使用Moq的
DefaultMock.Mock
行为。现在我遇到了一个问题,在如此模拟的对象层次结构中,一个对象来自一个没有默认构造函数的抽象类。当有人试图获取这个对象时,我得到一个异常。有没有办法解决这种行为

一个简短的例子:

//The abstract class
public abstract class Abstract
{
    protected Abstract(string foo)
    {
    }
}

//The mocked interface
public interface ITestClass
{
    Abstract Abstract { get; }
}

//The mock
internal class TestClass
{
    public static void Main()
    {
        Mock<ITestClass> testMock = new Mock<ITestClass> {DefaultValue = DefaultValue.Mock};
        Abstract foo = testMock.Object.Abstract;
    }
}

解决方案应该是这样的:

Mock<ITestClass> testMock = new Mock<ITestClass> {DefaultValue = DefaultValue.Mock};
testMock.SetupGet(p => p.Abstract).Returns(new Abstract("foo"));
Abstract foo = testMock.Object.Abstract;
您应该为抽象类提供一个实现

public class InstanceWhichDerivesFromAbstract : Abstract
{
//implementation
}

很难理解你在问什么。你能提供一个例子吗?你还应该包括例外情况的详细信息。为什么不提供一个抽象类的模拟并就此结束呢?还有,我要。。。很好,我知道这种可能性。这个解决方案唯一让人恼火的地方是,在真实的例子中,抽象对象位于模拟层次结构的第三或第四层。这样做很痛苦。
testMock.SetupGet(p => p.Abstract).Returns(new InstanceWhichDerivesFromAbstract("foo"));
public class InstanceWhichDerivesFromAbstract : Abstract
{
//implementation
}