私はコンピュータサイエンスには新しく、ネットワークに関する知識はほとんどありません。 私はインターンシップで仕事を得ました。これはInterfaceを実装してTCPClientをモックすることです。 実際のサーバに接続する必要がないので、データを受信して保存して送信するには、疑似TCPClientが必要です。私が理解していることから、TCPClientでsendmessage関数を擬似するだけですか?インターフェイスを実装してTCPClientをモックする方法
public interface ITCPClient
{
/// <summary>
/// Event handler when TCP client is connected
/// </summary>
event ConnectionEventHandler Connected;
/// <summary>
/// Event handler for TCP Client on receiving data
/// </summary>
event DataReceivedEventHandler DataReceived;
/// <summary>
/// Event handler when TCP client is disconnect
/// </summary>
event ConnectionEventHandler Disconnected;
/// <summary>
/// Reports error when an error occurs
/// </summary>
event ErrorEventHandler OnError;
/// <summary>
/// Set whether to use HostByteOrder or NetworkByteorder with the socket - gateway expects network byte order
/// </summary>
bool ByteOrder { get; set; }
/// <summary>
/// Returns true if the client is running and connected to the server
/// </summary>
bool IsRunning { get; }
/// <summary>
/// Add the message to the sendqueue. The message will be processed by the ProcessMessage function waiting for the message.
/// </summary>
/// <param name="Message"></param>
void SendMessage(string Message);
/// <summary>
/// Add the message to the sendqueue. The message willbe processed by the ProcessMessage function waiting for the message.
/// </summary>
/// <param name="Message"></param>
void SendMessageHiPriority(string Message);
/// <summary>
/// Starts the client and spawn the thread for processing the message
/// </summary>
void Start();
/// <summary>
/// Disconnects and stops listening for messages
/// </summary>
void StopProcessing();
}
public class MockTCPClient : ITCPClient
{
#region Private Fields
private string msg;
#endregion Private Fields
#region Constructor
public MockTCPClient()
{
//nothing
}
#endregion Constructor
#region event
public event ConnectionEventHandler Connected;
public event ConnectionEventHandler Disconnected;
public event ErrorEventHandler OnError;
public event DataReceivedEventHandler DataReceived;
#endregion event
#region property
//question
public string ReceivedMessage
{
get
{
return msg;
}
set
{
msg = value;
}
}
#endregion property
//question??
private void OnDataReceived(object sender, string e)
{
DataReceivedEventHandler dataReceived = DataReceived;
if (dataReceived != null)
dataReceived(this, e);
}
#region ITCPClient Members
#region properties
public bool ByteOrder { get; set; }
public bool IsRunning { get; }
#endregion properties
public void SendMessage(string Message)
{
msg = Message;
}
public void SendMessageHiPriority(string Message)
{
}
public void Start()
{
}
public void StopProcessing()
{
}
#endregion ITCPClient Members
}
インターフェイス全体を実装する代わりに、模擬フレームワークを使用できます。テストに必要な部分だけを設定し、完了します。 Moq、NS代理店で読んで、さらにいくつかあります。また、TcpClientがどのように動作するかを読んで、あなたが模擬する必要があることを知っておくことをお勧めします。 – Nkosi
ITCPClientのどのメソッドとプロパティーで、クラスと対話する必要があるのかを明確にすることはできますか? –
@ScottHannenはい。このメソッドはvoid SendMessage(文字列メッセージ)です。また、イベントDataReceivedEventHandler DataReceivedも考慮されると思います。しかし、私はどのようにC#でイベントを実装するのか分かりません。 SendMessageメソッドは、元のTCPClientで処理されるキューにメッセージをエンキューするために使用されます。私は私の質問をはっきりと説明するかどうか分からない。ありがとうございました! – lancwl