Bot Builder v4.5 단위 테스트 : 대화 클래스 테스트 - CancelAndHelpDialog
12709 단어 BotFrameworkBotbuilderunittest
CancelAndHelpDialog
이 대화 상자에서는 주로 다음을 수행합니다.
그럼 조속히 테스트를 보겠습니다.
CancelAndHelpDialogTests 생성자
CancelAndHelpDialogTests 클래스내에서 실행하는 테스트에 공통되는 것을 생성자 로 준비합니다.
private readonly IMiddleware[] _middlewares;
public CancelAndHelpDialogTests(ITestOutputHelper output)
: base(output)
{
_middlewares = new IMiddleware[] { new XUnitDialogTestLogger(output) };
}
ShouldBeAbleToCancel 테스트
이 테스트는 cancel 또는 quite가 지연된 경우 처리를 테스트합니다.
CancelAndHelpDialogTests.cs[Theory]
[InlineData("cancel")]
[InlineData("quit")]
public async Task ShouldBeAbleToCancel(string cancelUtterance)
{
var sut = new TestCancelAndHelpDialog();
var testClient = new DialogTestClient(Channels.Test, sut, middlewares: _middlewares);
// Execute the test case
var reply = await testClient.SendActivityAsync<IMessageActivity>("Hi");
Assert.Equal("Hi there", reply.Text);
Assert.Equal(DialogTurnStatus.Waiting, testClient.DialogTurnResult.Status);
reply = await testClient.SendActivityAsync<IMessageActivity>(cancelUtterance);
Assert.Equal("Cancelling...", reply.Text);
Assert.Equal(DialogTurnStatus.Complete, testClient.DialogTurnResult.Status);
}
테스트 패턴 만들기
이번에도 Theory 테스트입니다만, 전회보다 패턴이 복잡하지 않기 때문에, InlineData 를 사용하고 있습니다.
더미 대화
취소 흐름을 시도하는 것이 목적이므로 실제로 사용하는 MainDialog 나 BookingDialog 대신 테스트를 위해 대화 상자를 만들었습니다.
private class TestCancelAndHelpDialog : CancelAndHelpDialog
{
public TestCancelAndHelpDialog()
: base(nameof(TestCancelAndHelpDialog))
{
AddDialog(new TextPrompt(nameof(TextPrompt)));
var steps = new WaterfallStep[]
{
PromptStep,
FinalStep,
};
AddDialog(new WaterfallDialog("testWaterfall", steps));
InitialDialogId = "testWaterfall";
}
private async Task<DialogTurnResult> PromptStep(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
return await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { Prompt = MessageFactory.Text("Hi there") }, cancellationToken);
}
private Task<DialogTurnResult> FinalStep(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
}
테스트 실행 및 결과 확인
이번에도 DialogTestClient를 사용하여 테스트를 실행합니다. 테스트를 위해 준비한 TestCancelAndHelpDialog 대화 상자를 인스턴스화하고 먼저 "Hi"를 보내 대화를 시작합니다. 또한 대화 상자의 상태를 확인합니다.
var sut = new TestCancelAndHelpDialog();
var testClient = new DialogTestClient(Channels.Test, sut, middlewares: _middlewares);
// Execute the test case
var reply = await testClient.SendActivityAsync<IMessageActivity>("Hi");
Assert.Equal("Hi there", reply.Text);
Assert.Equal(DialogTurnStatus.Waiting, testClient.DialogTurnResult.Status);
그런 다음 inlineData로 전달된 취소 구문을 보내 응답과 대화 상태를 확인합니다.
reply = await testClient.SendActivityAsync<IMessageActivity>(cancelUtterance);
Assert.Equal("Cancelling...", reply.Text);
Assert.Equal(DialogTurnStatus.Complete, testClient.DialogTurnResult.Status);
테스트 탐색기에서 확인하면 각 결과가 표시됩니다.
ShouldBeAbleToGetHelp 테스트
기본 흐름은 동일하지만 테스트 실행 및 확인은 마지막 대화 상태가 Complete가 아닌 원래 대화를 계속 실행할 수 있는 상태인 Waiting인지 확인합니다.
요약
이번에는 더 간단한 테스트 케이스를 만드는 방법으로 InlineData를 사용하는 방법을 살펴 보았습니다. 이쪽의 기사를 먼저 하는 것이 좋았던 생각도 합니다만, 때 이미 늦었습니다. 다음에는 DateResolverDialog 테스트를 살펴 보겠습니다.
다음 기사로
목차 페이지로 돌아가기
private readonly IMiddleware[] _middlewares;
public CancelAndHelpDialogTests(ITestOutputHelper output)
: base(output)
{
_middlewares = new IMiddleware[] { new XUnitDialogTestLogger(output) };
}
이 테스트는 cancel 또는 quite가 지연된 경우 처리를 테스트합니다.
CancelAndHelpDialogTests.cs
[Theory]
[InlineData("cancel")]
[InlineData("quit")]
public async Task ShouldBeAbleToCancel(string cancelUtterance)
{
var sut = new TestCancelAndHelpDialog();
var testClient = new DialogTestClient(Channels.Test, sut, middlewares: _middlewares);
// Execute the test case
var reply = await testClient.SendActivityAsync<IMessageActivity>("Hi");
Assert.Equal("Hi there", reply.Text);
Assert.Equal(DialogTurnStatus.Waiting, testClient.DialogTurnResult.Status);
reply = await testClient.SendActivityAsync<IMessageActivity>(cancelUtterance);
Assert.Equal("Cancelling...", reply.Text);
Assert.Equal(DialogTurnStatus.Complete, testClient.DialogTurnResult.Status);
}
테스트 패턴 만들기
이번에도 Theory 테스트입니다만, 전회보다 패턴이 복잡하지 않기 때문에, InlineData 를 사용하고 있습니다.
더미 대화
취소 흐름을 시도하는 것이 목적이므로 실제로 사용하는 MainDialog 나 BookingDialog 대신 테스트를 위해 대화 상자를 만들었습니다.
private class TestCancelAndHelpDialog : CancelAndHelpDialog
{
public TestCancelAndHelpDialog()
: base(nameof(TestCancelAndHelpDialog))
{
AddDialog(new TextPrompt(nameof(TextPrompt)));
var steps = new WaterfallStep[]
{
PromptStep,
FinalStep,
};
AddDialog(new WaterfallDialog("testWaterfall", steps));
InitialDialogId = "testWaterfall";
}
private async Task<DialogTurnResult> PromptStep(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
return await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { Prompt = MessageFactory.Text("Hi there") }, cancellationToken);
}
private Task<DialogTurnResult> FinalStep(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
}
테스트 실행 및 결과 확인
이번에도 DialogTestClient를 사용하여 테스트를 실행합니다. 테스트를 위해 준비한 TestCancelAndHelpDialog 대화 상자를 인스턴스화하고 먼저 "Hi"를 보내 대화를 시작합니다. 또한 대화 상자의 상태를 확인합니다.
var sut = new TestCancelAndHelpDialog();
var testClient = new DialogTestClient(Channels.Test, sut, middlewares: _middlewares);
// Execute the test case
var reply = await testClient.SendActivityAsync<IMessageActivity>("Hi");
Assert.Equal("Hi there", reply.Text);
Assert.Equal(DialogTurnStatus.Waiting, testClient.DialogTurnResult.Status);
그런 다음 inlineData로 전달된 취소 구문을 보내 응답과 대화 상태를 확인합니다.
reply = await testClient.SendActivityAsync<IMessageActivity>(cancelUtterance);
Assert.Equal("Cancelling...", reply.Text);
Assert.Equal(DialogTurnStatus.Complete, testClient.DialogTurnResult.Status);
테스트 탐색기에서 확인하면 각 결과가 표시됩니다.
ShouldBeAbleToGetHelp 테스트
기본 흐름은 동일하지만 테스트 실행 및 확인은 마지막 대화 상태가 Complete가 아닌 원래 대화를 계속 실행할 수 있는 상태인 Waiting인지 확인합니다.
요약
이번에는 더 간단한 테스트 케이스를 만드는 방법으로 InlineData를 사용하는 방법을 살펴 보았습니다. 이쪽의 기사를 먼저 하는 것이 좋았던 생각도 합니다만, 때 이미 늦었습니다. 다음에는 DateResolverDialog 테스트를 살펴 보겠습니다.
다음 기사로
목차 페이지로 돌아가기
이번에는 더 간단한 테스트 케이스를 만드는 방법으로 InlineData를 사용하는 방법을 살펴 보았습니다. 이쪽의 기사를 먼저 하는 것이 좋았던 생각도 합니다만, 때 이미 늦었습니다. 다음에는 DateResolverDialog 테스트를 살펴 보겠습니다.
다음 기사로
목차 페이지로 돌아가기
Reference
이 문제에 관하여(Bot Builder v4.5 단위 테스트 : 대화 클래스 테스트 - CancelAndHelpDialog), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kenakamu/items/471a0479d75c57914fb8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)