C# 简明事件测试
我对测试事件调用的简洁、最好是流畅的方法感兴趣。我已经看到了一些与相关概念非常接近的例子,特别是在Moq方面,但还没有完全实现 例如,我相信我应该能够实现这样的目标,但只有一个或两个用于测试的衬里: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
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));