Ich bin neu in der Informatik und habe wenig Wissen im Netzwerk. Ich habe eine Aufgabe in meinem Praktikum.Es soll einen TCPClient mit Interface implementieren. Die Idee ist, dass wir, da wir keine Verbindung zum echten Server herstellen müssen, nur einen Schein-TCPClient benötigen, um Daten zu empfangen, zu speichern und zu versenden. Von was ich verstehe, ist es nur die sendmessage Funktion in TCPClient zu verspotten ??Wie man TCPClient durch Implementierung der Schnittstelle Mock
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
}
Sie können ein Mock Framework verwenden, anstatt die gesamte Schnittstelle implementieren zu müssen. Sie konfigurieren nur die Teile, die Sie für Ihren Test benötigen, und Sie sind fertig. lesen Sie auf Moq, NSubstitute und es gibt ein paar mehr. Ich würde auch empfehlen, zu lesen, wie ein TcpClient funktioniert, damit Sie eine Vorstellung davon haben, was Sie zum Nachahmen brauchen. – Nkosi
Können Sie klären, mit welchen Methoden und Eigenschaften von ITCPClient Ihre Klasse interagieren muss? –
@ScottHannen Ja.Die Methode ist void SendMessage (string Message); Und ich denke auch Ereignis DataReceivedEventHandler DataReceived wird ebenfalls berücksichtigt. Aber ich habe keine Ahnung, wie man ein Event in C# implementiert. Die Methode SendMessage wird verwendet, um Nachrichten in einer Warteschlange in die Warteschlange einzureihen, die im ursprünglichen TCPClient verarbeitet werden. Ich bin mir nicht sicher, ob ich meine Frage klar erkläre. Vielen Dank! – lancwl