为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 bot 框架(Echobot,使用 ITurnContext)进行单元测试设置

如何使用 bot 框架(Echobot,使用 ITurnContext)进行单元测试设置

C#
呼啦一阵风 2022-12-24 14:26:05
我正在尝试为 Echobot 进行单元测试(只是为了了解它是如何工作的,以便我可以将它用于我的实际机器人),但有一个问题我无法解决。我面临的问题是我正在使用 ITurnContext 并且我遇到的每个示例都在使用 DialogContext(使用 IWaitable 发送消息)。ITurnContext 是只可读的,所以我不能在其中设置任何东西,除非我在 SetUp 类中设置它,这不是那么漂亮 - 但它有效,所以我继续只是想看看会发生什么,但我得到了一个错误:Message: Moq.MockException : Expected invocation on the mock at least once, but was never performed: c => c.PostAsync(Mock<Microsoft.Bot.Builder.ITurnContext:00000001>.Object, "You sent 'test'")No setups configured.No invocations performed.首先,我使用本指南开始:https://medium.com/@createdincode/simple-unit-testing-in-microsofts-c-bot-framework-with-nunit-and-moq-345b805ecd1b 在我遇到一些问题之后我尝试在线搜索并遇到此线程的问题:自动测试 Microsoft Bot Framework => 但顶部答案中提供的链接都给了我 404..同样适用于这个单元测试 Bot Framework,遗憾的是:(测试类目前是这样的:namespace EchoBot.UnitTest{    [TestFixture]    class EchoTest    {        private Mock<IChatHelper> _chat;        private EchoBotBot _echobot;        private Mock<ITurnContext> _context;        [SetUp]        public void SetUp()        {            _chat = new Mock<IChatHelper>();            _echobot = new EchoBotBot(_chat.Object);            var activity = new Activity(ActivityTypes.Message);            activity.Text = "test";            _context = new Mock<ITurnContext>();            _context.Setup(c => c.Activity).Returns(activity);        }        [Test]        public async Task echoBackTest()        {            await _echobot.OnTurnAsync(_context.Object);            _chat.Verify(c => c.PostAsync(_context.Object, "You sent 'test'"));        }    }}而且Helper类和我发的指南一样,只是我把DialogContext改成了ITurnContext。我不知道如何修复此错误,我害怕将自己困在最小起订量漏洞中(如果您明白我的意思)。我希望我描述的一切都足够好,并且有人可以帮助我!提前致谢 (:
查看完整描述

1 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

根据你的实现,如果你想Verify如果SendActivityAsync已经用正确的参数调用,你可以创建这样的东西。


//Arrange

var mock = new Mock<ITurnContext>();

mock.Setup(m => m.Activity).Returns(new Activity(ActivityTypes.Message) {Text = "test"});


var sut = new EchoBotBot(Mock.Of<IChatHelper>());


//Act

await sut.OnTurnAsync(mock.Object);


//Assert

mock.Verify(m => m.SendActivityAsync(

    It.Is<string>(msg => msg == "You sent 'test'\n"), 

    null, //or It.IsAny<string>()

    "acceptingInput", //or It.IsAny<string>()

    It.IsAny<CancellationToken>()));


查看完整回答
反对 回复 2022-12-24
  • 1 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号