【发布时间】:2011-03-01 16:13:30
【问题描述】:
我正在编写一段网络代码,它侦听 TCP 连接、解析传入数据并引发适当的事件。自然地,为了避免阻塞应用程序的其余部分,侦听和解析是在后台工作人员中执行的。在尝试对这段代码进行单元测试时,我遇到了一个问题,由于网络代码比单元测试有更多的工作要做,单元测试在适配器有机会引发事件之前完成,因此测试失败。
适配器类:
public class NetworkAdapter : NetworkAdapterBase //NetworkAdapterBase is just an abstract base class with event definitions and protected Raise... methods.
{
//Fields removed for brevity.
public NetworkAdapter(TcpClient tcpClient)
{
_tcpConnection = tcpClient;
//Hook up event handlers for background worker.
NetworkWorker.DoWork += NetworkWorker_DoWork;
if (IsConnected)
{
//Start up background worker.
NetworkWorker.RunWorkerAsync();
}
}
private void NetworkWorker_DoWork(object sender, DoWorkEventArgs e)
{
while (IsConnected)
{
//Listen for incoming data, parse, raise events...
}
}
}
尝试的测试代码:
[TestMethod]
public void _processes_network_data()
{
bool newConfigurationReceived = false;
var adapter = new NetworkAdapter(TestClient); //TestClient is just a TcpClient that is set up in a [TestInitialize] method.
adapter.ConfigurationDataReceived += (sender, config) =>
{
newConfigurationReceived = true;
};
//Send fake byte packets to TestClient.
Assert.IsTrue(newConfigurationReceived, "Results: Event not raised.");
}
我应该如何尝试测试这种东西?
谢谢,
詹姆斯
【问题讨论】:
标签: c# multithreading unit-testing client-server