- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以编写一个调用 Messenger.Default.Register 方法的单元测试,然后编写一个供 Action 使用的 Assertion?
我想确定我的 ViewModel 在对我的一个命令调用 Execute 后是否发送了正确的消息。
我尝试将 Assert.AreEqual 编写为 Action,但这似乎无法正常工作。
最佳答案
听起来像是 mocking 的工作!假设您正在将信使接口(interface)传递给您的 View 模型(因为 dependency inversion is a Good Thing,正是出于这个原因),如果我理解正确,您的代码应该看起来像这样:
public class YourViewModel
{
readonly IMessenger messenger;
public YourViewModel(IMessenger messenger)
{
this.messenger = messenger;
// setup of your delegate command to call Execute
}
void Execute(object parameter)
{
messenger.Send(new YourMessageType());
}
}
然后在您的单元测试中,您将模拟 messenger 并验证是否调用了正确的方法,在本例中为 Send
。因此,使用流行的模拟框架 Moq :
public class YourViewModelTests
{
[Test]
public void Execute_Always_SendsYourMessageType()
{
// arrange
var mockRepository = new MockRepository(MockBehavior.Loose);
var mockMessenger = mockRepository.Create<IMessenger>();
var systemUnderTest = new YourViewModel(mockMessenger.Object);
// act
systemUnderTest.YourCommand.Execute(null);
// assert
mockMessenger.Verify(p => p.Send<YourMessageType>(
It.Is(m => /* return true if it's the right message */)));
}
}
通常我会将几乎所有的“安排”阶段转移到测试设置方法中,但您应该明白这一点。
如果您仍想在不模拟 Messenger 的情况下执行此操作并同时使用 Messenger.Default
,您可以执行以下操作:
public class YourViewModelTests
{
[Test]
public void Execute_Always_SendsYourMessageType()
{
// arrange
var systemUnderTest = new YourViewModel();
// Set the action to store the message that was sent
YourMessageType actual;
Messenger.Default.Register<YourMessageType>(this, t => actual = t);
// act
systemUnderTest.YourCommand.Execute(null);
// assert
YourMessageType expected = /* set up your expected message */;
Assert.That(actual, Is.EqualTo(expected));
}
}
关于nunit - 单元测试 MVVMLight Messenger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24168345/
我将一个用 TypeScript 编写的游戏上传到 Facebook Instant Games。我有一个 super 简单的调用来从我自己的服务器获取真实的 timestamp。 在将构建上传到 I
我正在尝试在 Facebook Messenger 中使用的对话流中添加建议信息 block 。但它不工作,我无法理解 这是我的自定义负载 { "facebook": { "attachm
我正在向 Facebook 发送一条结构化消息,其中包含指向图像文件(该文件位于 Amazon S3 中)的 URL。消息的结构根据 https://developers.facebook.com/d
我正在创建一个 FB Messenger 聊天机器人。发送图像 URL 链接时通过什么 JSON 格式生成预览。 在上面的截图中,你可以看到如果我手动发送一个 URL,FB messenger 会生成
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 2年前关闭。 Imp
我创建了一个 Facebook Messenger 机器人应用程序,我想知道当 1000 人或更多人使用时我的 Messenger 机器人应用程序是否能正常运行。有什么方法可以对其进行压力测试吗?例如
目前,这是我打开共享对话框以通过信使共享链接的代码: let invitationLink = NSURL(string:"http://somelink.com") if (UIAp
我创建了一个 Facebook 页面和 Facebook Messenger 机器人。当机器人按照我的个人资料设计工作时,我都被吓坏了。但是当我要求 friend 测试它时。我的页面名称不会出现在 M
我在尝试从 webview 获取用户上下文时收到错误代码 2018164。错误代码是2018164,但是我在文档中找不到。有人有这方面的任何信息吗? MessengerExtensions.getCo
我一直在构建一个 Facebook Messenger 机器人,但在我服务器上的 webhook 上接收来自 Messenger 的消息时遇到问题。我使用 Send API 和 Webhooks 已经
我的 Messenger 应用程序今天早些时候(几个小时前)获得了批准;应用管理页面说: Approved: pages_messaging 但是现在有人(以前不是测试人员)尝试使用它,我遇到了错误。
所有信使机器人是否一次只与一个用户直接交互?机器人可以加入两个或更多人的小组并与他们交谈吗? 最佳答案 目前,Facebook Messenger 机器人只能在一对一的基础上工作。 原因之一可能是隐私
我正在尝试读取未通过 Symfony Messenger 发送的排队消息(在 RabbitMQ 中)。似乎 Messenger 添加了一些标题,例如 headers: type: App\Me
我正在创建一个 Facebook 机器人,机器人在其中发送 5 个图像附件。 下面是发送 1 张图像的 Json 模板 "message":{ "attachment":{ "type":"ima
我正在尝试测试订阅 messaging_optins event 的 webhook ,但我正在努力手动触发该事件。 文档似乎表明使用“发送到 Messenger”插件应该会触发此事件,但在设置按钮后
我在我们的一个网站上集成了 Facebook 客户插件。我按照开发人员文档中的说明进行操作。当有活跃的 facebook session 时,它工作正常。但是,当没有事件的 fb session 时,
有一种方法可以将我的位置从移动客户端发送到 facebook-messenger,但是如何从机器人发送一些位置? (信使平台api) 当我尝试从 bot 发送类似的结构时,出现错误:(#100) Un
在开发机器人时,通常的做法是向用户显示打字指示器,而机器人在后台工作,但是是否可以检测相反的情况:用户是否正在打字或空闲?我在文档或谷歌中找不到任何信息。有人知道如何实现这一目标吗? 最佳答案 目前无
我的网站是用6角搭建的,在网站上,我得到了一个按钮和一个Facebook聊天信使。我希望当我点击按钮时,Facebook聊天将打开并聚焦光标。诸如此类的事情。有可能吗?。这是我的代码,在app.mod
我正在尝试在对 Dialogflow 的一个 Webhook 调用中发送多条消息,这些消息应传递给 Messenger。现在我的 Webhook 响应一个有问题的 JSON 正文: { 'fu
我是一名优秀的程序员,十分优秀!