📜  cs mock 返回 void (1)

📅  最后修改于: 2023-12-03 15:00:04.064000             🧑  作者: Mango

CS Mock: 模拟方法调用,返回void

简介

CS Mock是一种用于模拟方法调用的工具,通常用于单元测试中,可以模拟从一个方法调用到另一个方法的调用链,以便在测试过程中验证代码的正确性。

安装

CS Mock是一个Nuget包,可以通过以下方式进行安装:

PM> Install-Package CSMock
使用

CS Mock主要有两个重要的类:MockVerify,分别用于模拟方法调用和验证方法调用。以下是一个使用CS Mock进行方法调用模拟和验证的示例:

using CSMock;

public interface ICalculator
{
    int Add(int a, int b);
}

public class Calculator : ICalculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

[TestClass]
public class CalculatorTests
{
    [TestMethod]
    public void TestAdd()
    {
        Mock<ICalculator> mock = new Mock<ICalculator>();
        mock.Setup(x => x.Add(1, 2));
        Calculator calculator = new Calculator();
        int result = calculator.Add(mock.Object.Add(1, 2), 3);
        Verify.That(() => mock.Object.Add(1, 2)).WasCalledOnce();
    }
}

在上述示例中,我们定义了一个ICalculator接口和一个Calculator类,Calculator实现了ICalculator接口的Add()方法。我们使用CS Mock来模拟ICalculator接口的Add()方法,在测试过程中对其进行调用,并利用Verify来验证方法调用是否符合预期。

Mock

Mock<T>类是CS Mock中最重要的类之一,它用于模拟T类型的方法调用,并返回默认值(null、0、false等)。Mock<T>类有以下几个方法:

Setup

Setup方法用于设置模拟方法调用的预期参数和返回值。它有多个重载方式,常用的如下所示:

// 使用参数匹配
mock.Setup(x => x.Method(1, 2)).Returns(3);

// 使用委托
mock.Setup(x => x.Method(It.IsAny<int>(), It.IsAny<int>()))
    .Returns((int a, int b) => a + b);

// 使用Sequence
mock.SetupSequence(x => x.Method())
    .Returns(1)
    .Returns(2)
    .Returns(3);

Setup方法还有一些其他的重载方式,例如可以设置抛出异常的行为,或者将其设置为返回默认值等。

Object

Object属性用于获取模拟出来的对象。例如:

IService service = mock.Object;
VerifyAll

VerifyAll方法用于验证所有设置过的方法是否都已经被调用过。例如:

mock.VerifyAll();
Verify

Verify方法用于验证指定的方法是否已经被调用过。例如:

// 验证调用了一次
Verify.That(() => mock.Method(1, 2)).WasCalledOnce();

// 验证从未调用
Verify.That(() => mock.Method(1, 2)).WasNotCalled();
Verify

Verify类是CS Mock中用于验证方法调用的类。它有以下几个静态方法:

That

That方法用于指定要验证的方法。例如:

Verify.That(() => service.Method(1, 2)).WasCalledOnce();
WasCalledTimes

WasCalledTimes方法用于指定方法应该被调用的次数。例如:

Verify.That(() => service.Method(1, 2)).WasCalledTimes(3);
WasCalledOnce

WasCalledOnce方法用于验证方法是否被调用过且只调用了一次。例如:

Verify.That(() => service.Method(1, 2)).WasCalledOnce();
WasNotCalled

WasNotCalled方法用于验证方法是否从未被调用过。例如:

Verify.That(() => service.Method(1, 2)).WasNotCalled();
总结

CS Mock是一个用于模拟方法调用的工具,可以在单元测试中使用。它能够帮助我们验证代码的正确性,节省单元测试的时间和精力。我们可以使用Mock<T>来模拟方法调用,并使用Verify来验证方法调用的正确性。