我正在使用 Moq 进行验证和单元测试。我想验证是否使用参数 1 和参数 5 调用了方法“添加”,并且没有调用除这些之外的任何其他值。
是否可以创建验证,类似于下面的代码?(注意这不是实际代码!)
mock.Verify(x=>x.Add(1), Times.Once());
mock.Verify(x=>x.Add(5), Times.Once());
mock.Verify(x=>x.Add(It.IsAny<int>()), Times.Never());
我正在使用 Moq 进行验证和单元测试。我想验证是否使用参数 1 和参数 5 调用了方法“添加”,并且没有调用除这些之外的任何其他值。
是否可以创建验证,类似于下面的代码?(注意这不是实际代码!)
mock.Verify(x=>x.Add(1), Times.Once());
mock.Verify(x=>x.Add(5), Times.Once());
mock.Verify(x=>x.Add(It.IsAny<int>()), Times.Never());
您可以试试这个,将 lambda 表达式传递给第三次验证以排除任何不同于 1 和 5 的值。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
namespace Tests.x21
{
public interface IMyInterface
{
void Add(int num);
}
public class Executor
{
private IMyInterface _dep;
public Executor(IMyInterface dep)
{
_dep = dep;
}
public void Execute()
{
_dep.Add(1);
_dep.Add(5);
_dep.Add(4); // comment to make the test work
}
}
[TestClass]
public class UnitTest21
{
[TestMethod]
public void TestMethod1()
{
var mock = new Mock<IMyInterface>();
var executor = new Executor(mock.Object);
executor.Execute();
mock.Verify(x => x.Add(1), Times.Once());
mock.Verify(x => x.Add(5), Times.Once());
mock.Verify(m => m.Add(It.Is<int>(num => num != 1 && num != 5)), Times.Never());
}
}
}