1

検証と単体テストに Moq を使用しています。メソッド 'Add' がパラメーター 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

これを試すことができます。ラムダ式を 3 番目の検証に渡して、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 に答える