在我的项目中,我有一个类检查localhost上的所有端口,如果port是空闲则返回true,否则返回false。该解决方案基于this answer
我需要以某种方式测试它。有没有办法暂时使用该端口,然后将其释放回来?
我尝试使用 TcpListener Start但没有成功。如果我使用 TcpClient Connect 我得到System.Net.Sockets.SocketException 无法建立连接,因为目标计算机主动拒绝它127.0.0.1:myPort。
这是我使用的代码:
class TestPortLocker
{
public TcpClient client;
public TcpListener listener;
public void Lock(int port)
{
client = new TcpClient();
client.Connect("localhost", port);
//listener = new TcpListener(port);
//listener.Start();
}
public void Stop()
{
client.Close();
//listener.Stop();
}
}
答案 0 :(得分:1)
您可以编写单元测试来检查代码。这是您的单元测试方法和测试中的假设方法的一些伪代码。
假设您有一个要测试的类的方法:
public class PortManager
{
private _portChecker = portChecker;
public PortManager(IPortChecker portChecker)
{
_portChecker = portChecker;
}
public bool PortsAreFree(int start, int end)
{
for(int i = start, i <= end; i++)
if(!_portChecker.IsPortOpen(i))
return false;
return true;
}
}
现在要测试此方法,您可以使用模拟IPortChecker:
[TestFixture]
public class PortManagerTests
{
[Test]
public void PortsAreFree_APortIsLocked_ReturnsFalse()
{
var mock = new Mock<IPortChecker>();
mock.Setup(x=> x.IsPortOpen(77)).Returns(false);
var portManager = new PortManager(mock.Object);
Assert.Equal(true, portManager.PortsAreFree(1, 76));
Assert.Equal(true, portManager.PortsAreFree(78, 200));
Assert.Equal(false, portManager.PortsAreFree(1, 200));
}
}
}