C# - ;使用Assert在Throw New Excepction中出现错误

时间:2017-08-05 20:58:34

标签: c# exception visual-studio-2015 frameworks throw

我在C#项目中使用此代码

public async Task should_not_raise_exception(Mock<IWebSocketClient> webSocket, SlackConnection slackConnection)
    {
        // given
        var connectionInfo = new ConnectionInformation
        {
            WebSocket = webSocket.Object
        };
        await slackConnection.Initialise(connectionInfo);

        var inboundMessage = new ChatMessage
        {
            MessageType = MessageType.Message,
            User = "lalala"
        };

        slackConnection.OnMessageReceived += message => throw new Exception("EMPORER OF THE WORLD");

        // when & then
        Assert.DoesNotThrow(() => webSocket.Raise(x => x.OnMessage += null, null, inboundMessage));
    }

但是当我编译它时,这显示了一个错误;预计,关于错误的代码部分是这样的:

slackConnection.OnMessageReceived += message => throw new Exception("EMPORER OF THE WORLD");

        // when & then
        Assert.DoesNotThrow(() => webSocket.Raise(x => x.OnMessage += null, null, inboundMessage));

我正在使用框架4.6.1

检查附加图像

Image

1 个答案:

答案 0 :(得分:1)

只需使用以下代码行即可重现问题:

Action<string> foo = message => throw new Exception();

问题是在C#7.0之前,你不能单独使用throw作为表达式......这就是表达式lambda表达式所必须具备的。

该行代码在C#7中有效,但在C#6或更早版本中无效。无论您正在使用哪个版本的框架都无关紧要 - 您使用哪个C#编译器都很重要。

您只需使用语句lambda(基本上是使用大括号的lambda表达式)来修改代码:

slackConnection.OnMessageReceived +=
    message => { throw new Exception("EMPORER OF THE WORLD"); };

...或者您可以升级到使用C#7 :)(例如,通过更新到VS 2017。)