2017-08-05 94 views
-1

进出口使用在C#项目的代码预计在抛出新Excepction错误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

您可以复制与眼前这个问题代码行:

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

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

该行代码在C#7中有效,但不在C#6或更早的版本中。使用哪个版本的框架并不重要 - 它与您使用的是哪种C#编译器有关。

你可以只使用一个声明拉姆达(基本上,使用大括号lambda表达式),而不是解决您的代码:

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

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

+0

谢谢!有用 –