C# 阻碍Moq模拟没有默认构造函数的抽象类?
我喜欢使用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
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
}