私は(ユーザーがボットを追加したときに言って歓迎のメッセージを)Conversations.SendToConversationAsyncは、ユニットテストでクラッシュ
private static async Task<string> OnSendOneToOneMessage(Activity activity,
IList<Attachment> attachments = null)
{
var reply = activity.CreateReply();
if (attachments != null)
{
reply.Attachments = attachments;
}
if (_connectorClient == null)
{
_connectorClient = new ConnectorClient(new Uri(activity.ServiceUrl));
}
var resourceResponse = await _connectorClient.Conversations.SendToConversationAsync(reply);
return resourceResponse.Id;
}
とユニットテストルックスをコントローラ自体からのメッセージを送信するには、コントローラで次のメソッドを持っていますこのように
[TestClass]
public sealed class MessagesControllerTest
{
[Test]
public async Task CheckOnContactRelationUpdate()
{
// Few more setup related to dB <deleted>
var activity = new Mock<Activity>(MockBehavior.Loose);
activity.Object.Id = activityMessageId;
activity.Object.Type = ActivityTypes.ContactRelationUpdate;
activity.Object.Action = ContactRelationUpdateActionTypes.Add;
activity.Object.From = new ChannelAccount(userId, userName);
activity.Object.Recipient = new ChannelAccount(AppConstants.BotId, AppConstants.BotName);
activity.Object.ServiceUrl = serviceUrl;
activity.Object.ChannelId = channelId;
activity.Object.Conversation = new ConversationAccount {Id = Guid.NewGuid().ToString()};
activity.Object.Attachments = Array.Empty<Attachment>();
activity.Object.Entities = Array.Empty<Entity>();
var messagesController =
new MessagesController(mongoDatabase.Object, null)
{
Request = new HttpRequestMessage(),
Configuration = new HttpConfiguration()
};
// Act
var response = await messagesController.Post(activity.Object);
var responseMessage = await response.Content.ReadAsStringAsync();
// Assert
Assert.IsNotEmpty(responseMessage);
}
}
メソッドOnSendOneToOneMessageは、ユーザーがborを追加したときに正常に動作します。しかし、単体テストではクラッシュします。私はPOSTのためのいくつかのセットアップが行方不明だと思う?
スタックトレースが
Result StackTrace:
at System.Net.Http.StringContent.GetContentByteArray(String content, Encoding encoding)
at System.Net.Http.StringContent..ctor(String content, Encoding encoding, String mediaType)
at System.Net.Http.StringContent..ctor(String content)
at <>.Controllers.MessagesController.<Post>d__4.MoveNext() in
C:\Users....MessagesController.cs:line 75
---システムでSystem.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスクタスク) で例外がスローされた以前の位置からスタックトレース--- の端部であります CでBotTest.Controllers.MessagesControllerTest.d__0.MoveNextでSystem.Runtime.CompilerServices.TaskAwaiter`1.GetResultで.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスクタスク) () ():\ユーザー.... MessagesControllerTest.cs:line 75 ---スタックの終了tra NUnit.Framework.Internal.AsyncInvocationRegion.AsyncTaskInvocationRegion.WaitFor PendingOperationsToComplete(オブジェクトinvocationResult)NUnit.Framework.Internal.Commands.TestMethodCommand.RunAsyncTestMethodで (TestExecutionContextコンテキスト) 結果メッセージで例外がスローされた以前の位置--- からCE: System.ArgumentNullException:値にnullを設定することはできません。 パラメータ名:コンテンツ
そして、ここでは、出力
Exception thrown: 'System.ArgumentNullException' in mscorlib.dll
Exception thrown: 'Microsoft.Rest.TransientFaultHandling.HttpRequestWithStatusException' in Microsoft.Rest.ClientRuntime.dll
Exception thrown: 'Microsoft.Rest.TransientFaultHandling.HttpRequestWithStatusException' in mscorlib.dll
Exception thrown: 'Microsoft.Rest.TransientFaultHandling.HttpRequestWithStatusException' in Microsoft.Rest.ClientRuntime.dll
Exception thrown: 'Microsoft.Rest.TransientFaultHandling.HttpRequestWithStatusException' in mscorlib.dll
Exception thrown: 'System.Net.Http.HttpRequestException' in System.Net.Http.dll
Exception thrown: 'System.UnauthorizedAccessException' in Microsoft.Bot.Connector.dll
Exception thrown: 'System.UnauthorizedAccessException' in mscorlib.dll
Exception thrown: 'System.UnauthorizedAccessException' in System.Net.Http.dll
Exception thrown: 'System.UnauthorizedAccessException' in mscorlib.dll
Exception thrown: 'System.UnauthorizedAccessException' in mscorlib.dll
NOTEです:私はすべての異なる方法で証明書を渡してみました。それでもユニットテストでクラッシュします。
ただし、コネクタクライアントを嘲笑していますか? –
私は最初に嘲笑を試みましたが、この1つは統合テストからさらに試しています。したがって、OnSendOneToOneMessageメソッドでテストが実行されるたびに、コネクタクライアントが作成されます。 – dolbyarun
あなたはどのサービスURLを使用していますか? [このコンストラクタ](https://github.com/Microsoft/BotBuilder/blob/master/CSharp/Library/Microsoft.Bot.Connector.Shared/ConnectorAPI/ConnectorClient.cs#L207)の資格情報をハードコーディングしてみましたか?いずれにせよ、私はこれを統合テストの正しい方法とは思わない –