Bot Builder v4.5 단위 테스트 : 대화 상자 클래스 테스트 - DateResolverDialog
13015 단어 BotFrameworkBotbuilderunittest
DateResolverDialog
이 대화 상자에서는 날짜별로 특화된 유효성 검사를 수행합니다.
그럼 조속히 테스트를 보겠습니다. 테스트는 하나뿐입니다.
CancelAndHelpDialog 테스트
이 테스트는 다양한 날짜 패턴으로 테스트를 수행합니다.
DateResolverDialogTests.cs[Theory]
[MemberData(nameof(DateResolverDialogTestsDataGenerator.DateResolverCases), MemberType = typeof(DateResolverDialogTestsDataGenerator))]
public async Task DialogFlowTests(TestDataObject testData)
{
// Arrange
var testCaseData = testData.GetObject<DateResolverDialogTestCase>();
var sut = new DateResolverDialog();
var testClient = new DialogTestClient(Channels.Test, sut, testCaseData.InitialData, new[] { new XUnitDialogTestLogger(Output) });
// Execute the test case
Output.WriteLine($"Test Case: {testCaseData.Name}");
Output.WriteLine($"\r\nDialog Input: {testCaseData.InitialData}");
for (var i = 0; i < testCaseData.UtterancesAndReplies.GetLength(0); i++)
{
var reply = await testClient.SendActivityAsync<IMessageActivity>(testCaseData.UtterancesAndReplies[i, 0]);
Assert.Equal(testCaseData.UtterancesAndReplies[i, 1], reply?.Text);
}
Output.WriteLine($"\r\nDialog result: {testClient.DialogTurnResult.Result}");
Assert.Equal(testCaseData.ExpectedResult, testClient.DialogTurnResult.Result);
}
테스트 패턴 만들기
이번은 BookingDialog 테스트 마찬가지로 MemberData 속성을 사용해 테스트를 취득하고 있습니다.
DateResolverDialogTestsDataGenerator 클래스
테스트는 DateResolverDialogTestsDataGenerator 의 BuildTestCaseObject 메서드로 테스트용 데이터를 작성하고 있습니다.
csharp:DateResolverDialogTestsDataGenerator .cs
private static object[] BuildTestCaseObject(string testCaseName, string input, string[,] utterancesAndReplies, string result)
{
var testData = new DateResolverDialogTestCase
{
Name = testCaseName,
InitialData = input,
ExpectedResult = result,
UtterancesAndReplies = utterancesAndReplies,
};
return new object[] { new TestDataObject(testData) };
}
또 MemberData 로 지정되고 있는 DateResolverCases 메소드로, 복수의 테스트 오브젝트를 작성하고 있습니다.
public static IEnumerable<object[]> DateResolverCases()
{
yield return BuildTestCaseObject(
"tomorrow",
null,
new[,]
{
{ "hi", "When would you like to travel?" },
{ "tomorrow", null },
},
$"{DateTime.Now.AddDays(1):yyyy-MM-dd}");
//以下省略
초기 테스트 케이스는 다음과 같습니다.
이름
"tomorrow"
처음 전달되는 날짜 문자열
null
대화
{ "hi", "When would you like to travel?"},
{ "tomorrow", null},
대화 결과 생성된 날짜
$"{DateTime.Now.AddDays(1):yyyy-MM-dd}");
이것은 LUIS에서 필요한 날짜를 얻을 수 없을 때 사용자가 "tomorrow"와 날짜를 지정한 경우의 흐름임을 알 수 있습니다.
마찬가지로 다른 테스트 케이스도 확인하십시오.
테스트 실행 및 결과 확인
작성한 테스트 케이스 데이터를 사용해 DialogTestClinet 를 작성합니다.
// Arrange
var testCaseData = testData.GetObject<DateResolverDialogTestCase>();
var sut = new DateResolverDialog();
var testClient = new DialogTestClient(Channels.Test, sut, testCaseData.InitialData, new[] { new XUnitDialogTestLogger(Output) });
그런 다음 지정된 대화를 끝까지 실행합니다.
for (var i = 0; i < testCaseData.UtterancesAndReplies.GetLength(0); i++)
{
var reply = await testClient.SendActivityAsync<IMessageActivity>(testCaseData.UtterancesAndReplies[i, 0]);
Assert.Equal(testCaseData.UtterancesAndReplies[i, 1], reply?.Text);
}
마지막으로 날짜를 확인합니다.
Output.WriteLine($"\r\nDialog result: {testClient.DialogTurnResult.Result}");
Assert.Equal(testCaseData.ExpectedResult, testClient.DialogTurnResult.Result);
테스트 탐색기에서 확인하면 각 결과가 표시됩니다.
요약
DataMember가 나오는 것은 두번째 때문에 조금 익숙했다고 생각합니다. 다음번은 시리즈의 최종회로, 컨트롤러의 테스트와 정리입니다.
다음 기사로
목차 페이지로 돌아가기
Reference
이 문제에 관하여(Bot Builder v4.5 단위 테스트 : 대화 상자 클래스 테스트 - DateResolverDialog), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kenakamu/items/82b3f26e10457481016b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이 테스트는 다양한 날짜 패턴으로 테스트를 수행합니다.
DateResolverDialogTests.cs
[Theory]
[MemberData(nameof(DateResolverDialogTestsDataGenerator.DateResolverCases), MemberType = typeof(DateResolverDialogTestsDataGenerator))]
public async Task DialogFlowTests(TestDataObject testData)
{
// Arrange
var testCaseData = testData.GetObject<DateResolverDialogTestCase>();
var sut = new DateResolverDialog();
var testClient = new DialogTestClient(Channels.Test, sut, testCaseData.InitialData, new[] { new XUnitDialogTestLogger(Output) });
// Execute the test case
Output.WriteLine($"Test Case: {testCaseData.Name}");
Output.WriteLine($"\r\nDialog Input: {testCaseData.InitialData}");
for (var i = 0; i < testCaseData.UtterancesAndReplies.GetLength(0); i++)
{
var reply = await testClient.SendActivityAsync<IMessageActivity>(testCaseData.UtterancesAndReplies[i, 0]);
Assert.Equal(testCaseData.UtterancesAndReplies[i, 1], reply?.Text);
}
Output.WriteLine($"\r\nDialog result: {testClient.DialogTurnResult.Result}");
Assert.Equal(testCaseData.ExpectedResult, testClient.DialogTurnResult.Result);
}
테스트 패턴 만들기
이번은 BookingDialog 테스트 마찬가지로 MemberData 속성을 사용해 테스트를 취득하고 있습니다.
DateResolverDialogTestsDataGenerator 클래스
테스트는 DateResolverDialogTestsDataGenerator 의 BuildTestCaseObject 메서드로 테스트용 데이터를 작성하고 있습니다.
csharp:DateResolverDialogTestsDataGenerator .cs
private static object[] BuildTestCaseObject(string testCaseName, string input, string[,] utterancesAndReplies, string result)
{
var testData = new DateResolverDialogTestCase
{
Name = testCaseName,
InitialData = input,
ExpectedResult = result,
UtterancesAndReplies = utterancesAndReplies,
};
return new object[] { new TestDataObject(testData) };
}
또 MemberData 로 지정되고 있는 DateResolverCases 메소드로, 복수의 테스트 오브젝트를 작성하고 있습니다.public static IEnumerable<object[]> DateResolverCases()
{
yield return BuildTestCaseObject(
"tomorrow",
null,
new[,]
{
{ "hi", "When would you like to travel?" },
{ "tomorrow", null },
},
$"{DateTime.Now.AddDays(1):yyyy-MM-dd}");
//以下省略
초기 테스트 케이스는 다음과 같습니다.
이름
"tomorrow"
처음 전달되는 날짜 문자열
null
대화
{ "hi", "When would you like to travel?"},
{ "tomorrow", null},
대화 결과 생성된 날짜
$"{DateTime.Now.AddDays(1):yyyy-MM-dd}");
이것은 LUIS에서 필요한 날짜를 얻을 수 없을 때 사용자가 "tomorrow"와 날짜를 지정한 경우의 흐름임을 알 수 있습니다.
마찬가지로 다른 테스트 케이스도 확인하십시오.
테스트 실행 및 결과 확인
작성한 테스트 케이스 데이터를 사용해 DialogTestClinet 를 작성합니다.
// Arrange
var testCaseData = testData.GetObject<DateResolverDialogTestCase>();
var sut = new DateResolverDialog();
var testClient = new DialogTestClient(Channels.Test, sut, testCaseData.InitialData, new[] { new XUnitDialogTestLogger(Output) });
그런 다음 지정된 대화를 끝까지 실행합니다.
for (var i = 0; i < testCaseData.UtterancesAndReplies.GetLength(0); i++)
{
var reply = await testClient.SendActivityAsync<IMessageActivity>(testCaseData.UtterancesAndReplies[i, 0]);
Assert.Equal(testCaseData.UtterancesAndReplies[i, 1], reply?.Text);
}
마지막으로 날짜를 확인합니다.
Output.WriteLine($"\r\nDialog result: {testClient.DialogTurnResult.Result}");
Assert.Equal(testCaseData.ExpectedResult, testClient.DialogTurnResult.Result);
테스트 탐색기에서 확인하면 각 결과가 표시됩니다.
요약
DataMember가 나오는 것은 두번째 때문에 조금 익숙했다고 생각합니다. 다음번은 시리즈의 최종회로, 컨트롤러의 테스트와 정리입니다.
다음 기사로
목차 페이지로 돌아가기
Reference
이 문제에 관하여(Bot Builder v4.5 단위 테스트 : 대화 상자 클래스 테스트 - DateResolverDialog), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kenakamu/items/82b3f26e10457481016b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Bot Builder v4.5 단위 테스트 : 대화 상자 클래스 테스트 - DateResolverDialog), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kenakamu/items/82b3f26e10457481016b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)