Mat*_*tze 7 c# sockets exception .net-core
这可能听起来很愚蠢,但我就是抓不到ExtendedSocketException被抛出的东西SocketTaskExtensions.ConnectAsync()。
完整的命名空间是:System.Net.Internals.SocketExceptionFactory.ExtendedSocketException
编译器抱怨Cannot resolve symbol 'ExtendedSocketException'. 我的类库和测试项目都针对 .Net Core 2.1。
此外,也没有可以添加的此类参考或 Nuget 包。至少我找不到任何东西......而且https://learn.microsoft.com上似乎也没有任何东西......
我在这里做错了什么?
[Fact]
[Trait("Category", "UnitTest")]
public async Task Should_Throw_Exception_If_Port_Unreachable()
{
// Arrange
var client = new TcpConnector();
var nonListeningPort = 81;
var endpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), nonListeningPort);
// Act & Assert
var connectTask = client.ConnectAsync(endpoint);
Func<Task> func = async () => { await connectTask; };
func.Should().Throw<ExtendedSocketException>();
}
Run Code Online (Sandbox Code Playgroud)
尽管本ExtendedSocketException应是私有的,但它肯定会被暴露:

另一方面,它继承自SocketException,所以我们不需要太关心它。
就您的测试而言,我认为您应该能够将您的断言修改为类似于以下内容的内容:
var exception = Assert.Catch(func);
Assert.IsInstanceOf<SocketException>(exception);
Assert.That(exception.Message.Contains("actively refused"));
Run Code Online (Sandbox Code Playgroud)