我正在尝试为 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>()));
- 1 回答
- 0 关注
- 121 浏览
添加回答
举报
0/150
提交
取消
