为什么我不能用 Moq 模拟 MouseButtonEventArgs.GetPosition()?

2024-03-08

我试图嘲笑MouseButtonEventArgs.GetPosition()与 Moq,但我不断收到此错误:

System.ArgumentException: Invalid setup on a non-overridable member:
m => m.GetPosition(It.IsAny<IInputElement>())

at Moq.Mock.ThrowIfCantOverride(Expression setup, MethodInfo methodInfo)  
at Moq.Mock.<>c__DisplayClass12`2.<Setup>b__11()
at Moq.PexProtector.Invoke<T>(Func`1 function)
at Moq.Mock.Setup<T1,TResult>(Mock mock, Expression`1 expression)
at Moq.Mock`1.Setup<TResult>(Expression`1 expression)

这是我设置模拟的代码:

    var mockMbEventArgs = new Mock<MouseButtonEventArgs>();
    mockMbEventArgs.Setup(m => m.GetPosition(It.IsAny<IInputElement>())).Returns(new Point(10.0, 10.0));

我不确定我做错了什么,有人对如何做到这一点有任何建议吗?


此错误意味着您正在尝试伪造一个未声明为的方法virtual.

Moq 在运行时生成一个类型,以便能够伪造它,生成的类型继承原始类型并覆盖其虚拟方法。由于非虚拟方法不能被覆盖(这是语言的规范,它不是 Moq 的限制),因此不可能伪造这些方法。

作为解决方案,您可以包装引发发送事件的类鼠标按钮事件参数并传递一个您自己的类,将相关方法声明为virtual。我认为这对你来说可能是一个小小的挑战,但值得尝试。

另一种解决方案是使用隔离框架来伪造非虚拟方法。例如,Typemock Isolator 就是一个可以做到这一点的框架。隔离器使用不同的机制,因此它允许伪造这种方法。

免责声明 - 我在 Typemock 工作

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我不能用 Moq 模拟 MouseButtonEventArgs.GetPosition()? 的相关文章

  • 如何模拟dbcontext?

    我正在使用实体框架核心 1 0 rc2 这是班级 public class ApplicationDbContext DbContext public ApplicationDbContext DbContextOptions
  • 我如何作为代理人传递财产?

    这是一个理论问题 我已经找到了解决问题的方法 这让我走上了不同的道路 但我认为这个问题仍然可能很有趣 我可以像使用方法一样将对象属性作为委托传递吗 例如 假设我有一个加载了数据的数据读取器 并且每个字段的值需要传递到已检查 DBNull 的
  • 在起订量中重置模拟验证?

    设置如下 public interface IFoo void Fizz Test public void A var foo new Mock
  • 使用假 DbContext 和 Autofixture 以及 Moq 进行测试

    所以请遵循这个例子 example http romiller com 2012 02 14 testing with a fake dbcontext 以及如何制作一个假的 DBContext 来测试我的测试 使用这个工作正常 Test
  • 测试自定义 AuthorizationAttribute 时抛出 NullReferenceException

    我看了一下 如何进行单元测试来测试检查请求标头的方法 https stackoverflow com questions 9263457 how do i make a unit test to test a method that che
  • 访问自动属性中的支持字段

    有什么方法可以访问属性的支持字段以进行验证 更改跟踪等 像下面这样的事情可能吗 如果没有 是否有计划将其纳入 NET 4 C 4 public string Name get set if value
  • 如何Moq Fluent接口/链方法

    我正在使用 Daniel Cazzulino 的 moq 框架 kzu 版本 4 10 1 我想要最小起订量 这样我就可以测试功能的特定部分 下面是我可以提取的代码的简单版本 流畅 链方法的设计是为了让您可以通过 Id 获取对象 并在需要时
  • Moq-ing 类或接口有什么区别?

    我一直在使用moq http code google com p moq 在我的单元测试中模拟对象 我在关于最小起订量的网站上看到它能够模拟类和接口 有一天 我与我的一位同事进行了讨论 他们表示没有理由模拟类 我应该只模拟接口 我对此并没有
  • c#.net 中委托事件的超级简单示例? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要一个非常简单的例子来了解自己对这些事件的了解 我觉得很难理解互联网或书籍上提供的示例 这是公开事
  • C# 中的空“if”语句是否会导致错误或警告?

    让我从一个现实生活中的例子开始 顾客 Alex 刚刚注意到 RemovalProcessor 第 138 行有一些奇怪的东西 if Session Handler ExecutePrefetchTasks null Session Exec
  • MSTest 与 Moq - DAL 设置

    我是最小起订量新手 刚刚开始一个已经在开发的项目 我负责设置单元测试 DatabaseFactory 有一个使用 EnterpriseLibrary 的自定义类 如下所示 public Database CreateCommonDataba
  • ASP.NET 4.0 中的模拟 HttpRequest

    我见过很多类似的帖子 但没有一个能真正解决我的特殊情况 我正在 ASP NET 4 0 Web 应用程序 ASP NET Forms 而不是 MVC 中编写单元测试 代码中有几个地方我称之为ServerVariables调用变量的集合 例如
  • 为什么起订量默认不设置所有属性?

    据我所知 在起订量中 您需要先设置属性 然后才能分配值 我的问题是whyMoq 不只是允许您默认设置属性 而无需 设置 它们 这是开发商的问题 在那之前你可以看看快速开始 https github com Moq moq4 wiki Qui
  • 模拟一个接口 { get;仅(最小起订量)

    我有一个IUnitOfWork包含到我们所有存储库的映射的接口 如下所示 public interface IUnitOfWork IDisposable IRepository
  • 自动夹具和起订量 v4

    我使用 Nuget 安装了 Autofixture 和 Moq 所以我有 moq 版本 4 当运行以下代码时 var fixture new Fixture Customize new AutoMoqCustomization fixtur
  • C# 3.0 中自动属性和公共字段的区别

    我无法理解为什么 C 3 0 中存在自动实现的属性语言功能 当你说的时候有什么区别 public string FirstName than public string FirstName get set 因为它们在生成的 IL 代码 和机
  • 什么是委托以及它如何允许创建对象[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如果委托是抽象的那么它如何允许创建对象 这是我发现的有关 C 委托的最佳文章之一的链接 作者出色地提供了关于委托如何工作以及我们为何使
  • UnitTest HttpResponse WriteAsync 和 CopyToAsync

    我想对下一个方法进行单元测试 public static async Task SetResponseBody HttpResponse response string message var originalResponseBody re
  • Moq - 如何对方法中引用的更改进行单元测试

    另一天 另一个问题 我的服务层有以下方法 public MatchViewData CreateMatch string user var matchViewData HasReachedMaxNumberOfMatchesLimit us
  • 起订量: 无法投射

    我有以下模拟 var MockHttpContext new Mock

随机推荐