C# 简明事件测试

C# 简明事件测试,c#,unit-testing,moq,C#,Unit Testing,Moq,我对测试事件调用的简洁、最好是流畅的方法感兴趣。我已经看到了一些与相关概念非常接近的例子,特别是在Moq方面,但还没有完全实现 例如,我相信我应该能够实现这样的目标,但只有一个或两个用于测试的衬里: using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace EventTest { public class TestClient { public event Action

我对测试事件调用的简洁、最好是流畅的方法感兴趣。我已经看到了一些与相关概念非常接近的例子,特别是在Moq方面,但还没有完全实现

例如,我相信我应该能够实现这样的目标,但只有一个或两个用于测试的衬里:

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace EventTest
{
    public class TestClient
    {
        public event Action<string> Output;

        public bool Speak(string message)
        {
            if (Output != null)
            {
                Output(message);
            }

            return true;
        }
    }

    [TestClass]
    public class BasicActionTests
    {
        private TestClient Client;

        [TestInitialize]
        public void Initialize()
        {
            Client = new TestClient();
        }

        [TestMethod]
        public void Speak()
        {
            const string message = "she sells sea shells by the sea shore - booyakasha!";

            System.Action<string> outDel = (output) =>
            {
                Assert.AreEqual(message, output);
            };

            Client.Output += outDel;

            try
            {
                bool success = Client.Speak(message);

                Assert.IsTrue(success, "Tongue Tied");
            }
            finally
            {
                Client.Output -= outDel;
            }
        }
    }
}
其中XXX可以是一个模拟,甚至只是一个断言扩展


我所见过的最接近的例子是,虽然它不完全存在,老实说,我不希望仅在这个用例中包含它,尽管我不介意包含Moq,因为我在其他地方大量使用它,或者另一个广泛使用的框架/库,提供其他测试功能。

不使用C事件关键字是否重要?与论坛网站不同,我们不使用感谢、任何感谢的帮助或签名。看,你说得对,约翰,只是我的疏忽。更新和赞赏!
Assert.IsTrue(()=>Client.Speak(message)).VerifyEvent(obj => obj.Output, (msg) => Assert.AreEqual(message, msg));