เซิร์ฟเวอร์จำลอง TCP/UDP อย่างง่ายสำหรับใช้ในโปรเจ็กต์ทดสอบซึ่งทดสอบโปรเจ็กต์ที่ใช้ .Net core
ตอนที่ฉันทำงานกับโปรเจ็กต์ Cimon.Net ฉันพบว่าฉันไม่สามารถจำลองซ็อกเก็ตกับไลบรารีที่มีอยู่ได้ ดังนั้นฉันจึงเปลี่ยนโปรเจ็กต์เพื่อสร้างซ็อกเก็ตปลอม แต่ปัญหายังคงอยู่ ดังนั้นฉันจึงเริ่มเขียนโปรเจ็กต์นี้ และสุดท้ายฉันก็ใช้สิ่งนี้ใน Cimon.Net
คุณสามารถติดตั้ง Rony.Net
ด้วย NuGet Package Manager Console:
Install-Package Rony.Net -Version 0.1.2
หรือผ่านทางอินเทอร์เฟซบรรทัดคำสั่ง .NET Core:
dotnet add package Rony.Net --version 0.1.2
ด้วย Rony.Net คุณสามารถสร้างเซิร์ฟเวอร์ได้ 3 ประเภท:
คุณสามารถสร้างและรันเซิร์ฟเวอร์จำลองได้ดังต่อไปนี้ พอร์ต, IP และการตั้งค่าอื่นๆ สามารถกำหนดค่าได้ผ่านตัวสร้าง:
using var tcpServer = new MockServer ( new TcpServer ( 3000 ) ) ;
tcpSever . Start ( ) ;
using var tcpSslServer = new MockServer ( new TcpServerSsl ( 4000 , certificateName , SslProtocols . None ) ) ;
tcpSslServer . Start ( ) ;
คุณต้องระบุ certificate
ที่ถูกต้องและติดตั้งไว้ซึ่งคุณมีสิทธิ์ในการอ่านคีย์ส่วนตัว และคุณสามารถตั้งค่า SslProtocol
ตามความต้องการของคุณได้
using var udpServer = new MockServer ( new UdpServer ( 5000 ) ) ;
โปรดทราบว่าเซิร์ฟเวอร์ UDP ไม่จำเป็นต้องเริ่มทำงาน เนื่องจากธรรมชาติของมัน
จากนั้นคุณสามารถใช้ไคลเอนต์ปกติเพื่อเชื่อมต่อและส่งคำขอไปยังพวกเขาได้ เช่นเดียวกับด้านล่าง:
using var client = new TcpClient ( ) ;
await client . ConnectAsync ( IPAddress . Parse ( "127.0.0.1" ) , 3000 ) ;
var client = new UdpClient ( ) ;
client . Connect ( IPAddress . Parse ( "127.0.0.1" ) , 5000 ) ;
คุณสามารถใช้ mockServer.Mock
เพื่อจัดการข้อมูลส่ง/รับ จากนั้นเซิร์ฟเวอร์จะส่งคืนข้อมูลที่กำหนดค่าตามข้อมูลที่ส่ง:
mockServer . Mock . Send ( "Test String" ) . Receive ( "Test Response" ) ;
mockServer . Mock . Send ( new byte [ ] { 1 , 2 , 3 } ) . Receive ( new byte [ ] { 3 , 2 , 1 } ) ;
mockServer . Mock . Send ( "abcd" ) . Receive ( x => x . ToUpper ( ) ) ;
ตัวเลือกที่สำคัญในการใช้ mockServer.Mock
คือการเพิ่มคำขอ Any
เข้าไป จากนั้นมันจะตอบกลับคำขอที่ไม่ได้กำหนดค่าใด ๆ บนการกำหนดค่านี้ (เวอร์ชัน 0.1.1 และใหม่กว่า) คุณสามารถกำหนดค่าเซิร์ฟเวอร์สำหรับตัวเลือกนี้ได้โดยใช้สตริงว่างใน Send()
วิธีการเช่นเดียวกับด้านล่าง:
mockServer . Mock . Send ( "" ) . Receive ( "Test Response" ) ;
คุณสามารถใช้ mockServer.Mock
ก่อนหรือหลัง mockServer.Run()
ได้ สำหรับรายละเอียดเพิ่มเติม โปรดตรวจสอบโครงการทดสอบ
คุณต้องมี Visual Studio 2019 เป็นอย่างน้อย (คุณสามารถดาวน์โหลด Community Edition ได้ฟรี)
การทดสอบทั้งหมดใช้ Xunit สำหรับการรันเซิร์ฟเวอร์ TCP ด้วย SSL/TLS คุณควรเปลี่ยนฟิลด์ _certificateName
เป็นชื่อใบรับรองบนเครื่องของคุณ โปรดทราบว่าคุณต้องมีสิทธิ์ในการอ่านคีย์ส่วนตัวของใบรับรอง