1

我正在使用 Moq 库。我正在模拟一个执行所有常规 CRUD 功能的实例。我想将其设置为只允许对某个对象进行一次 Delete(x) 调用,并且对同一对象的所有连续调用 Delete(x) 都应返回异常。

我的 Delete() 方法返回 void。

我怎么做?

一些代码

mock = new Mock<ITest>();
mock.Setup(m => m.Delete(1));
mock.Setup(m => m.Delete(3)).Throws<Exception>();
...
4

2 回答 2

4

让代码说话:-)

    public interface ITest
    {
        void Delete(int x);
    }

    [TestMethod]
    [ExpectedException(typeof(InvalidOperationException))]
    public void TestMethod1()
    {
        HashSet<int> deleted = new HashSet<int>();

        var mock = new Mock<ITest>();
        mock.Setup(m => m.Delete(It.Is<int>(x => deleted.Contains(x))))
            .Throws(new InvalidOperationException("already deleted"));
        mock.Setup(m => m.Delete(It.Is<int>(x => !deleted.Contains(x))))
            .Callback<int>(x => deleted.Add(x));

        mock.Object.Delete(1);
        mock.Object.Delete(1);
    }
于 2009-06-12T14:55:40.520 回答
0

你不能做类似的事情(确切的语法可能不记得了):

mock.Expect(m => m.Delete(1)).Times.Exactly(1);
于 2009-06-12T14:47:37.917 回答