1

我正在使用 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());
4

1 回答 1

2

您可以试试这个,将 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());
        }
    }
}
于 2013-02-14T18:36:50.943 回答