2017-08-05 99 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

謝謝!有用 –