【发布时间】:2011-05-23 18:01:15
【问题描述】:
我想为 MyClass 编写单元测试,但它的基类是一个抽象类。
public class MyClass : AbstractBaseClass
{
}
我想模拟 AbstractBase 类,以便在创建要测试的 MyClass 实例时跳过其构造函数中的一些逻辑。无论如何我可以做到这一点吗?
//Unit Test
var test = new Mock<IInterface>();
var derivedclass = new DerivedClass(test.Object);
test.Setup(d=>d.MyMethod(It.IsAny<string>()).returns(2);
derivedclass.MyMethod("hello");
// Derived Class
class DerivedClass : AbstractClass{
//constuctor
public DerivedClass(IInterface interface){
_interface = interface;
}
public MyMethod(string str){
return 2;
}
}
//Abstract Class
public abstract class AbstractClass
{
// This method gets called when i create the instance of the derived class in my unit
test..
protected AbstractedClass() : this(new SomeOtherClass()){
DoSomethingElse(); /// I want to skip this method or mock it.
}
}
【问题讨论】:
-
您遇到了设计问题。 AbstractClass 是其 ctor 中依赖项的硬编码实例化。如果您要模拟此依赖项上的方法,则需要更改 AbstractClass ctor 以接收依赖项。如果你能详细说明这个方法在内部做了什么,也许你会得到一些更好的答案
标签: unit-testing moq