gpt4 book ai didi

unit-testing - 如何使用 MOQ 框架为抽象基类创建 Mock?

转载 作者:行者123 更新时间:2023-12-03 14:39:57 31 4
gpt4 key购买 nike

我想为 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.
}
}

最佳答案

是的,这是 Moq 中一个非常基本的场景。
假设您的抽象类如下所示:

public class MyClass : AbstractBaseClass
{
public override int Foo()
{
return 1;
}
}

您可以编写以下测试:
[Test]
public void MoqTest()
{
var mock = new Moq.Mock<AbstractBaseClass>();
// set the behavior of mocked methods
mock.Setup(abs => abs.Foo()).Returns(5);

// getting an instance of the class
var abstractBaseClass = mock.Object;
// Asseting it actually works :)
Assert.AreEqual(5, abstractBaseClass.Foo());
}

关于unit-testing - 如何使用 MOQ 框架为抽象基类创建 Mock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6101030/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com