【问题标题】:Where is the MOQ documentation? [closed]最小起订量文档在哪里? [关闭]
【发布时间】:2010-09-18 20:56:40
【问题描述】:

在哪里可以找到 MOQ 的综合文档?我刚开始嘲笑,我很难理解它。我已经阅读了http://code.google.com/p/moq/wiki/QuickStart 的所有链接,但似乎找不到教程或温和的介绍。

我也简要地看了下 Rhino Mocks,但发现它很混乱。


是的 - 我读过 Stephen Walthers 的文章 - 非常有帮助。我也浏览了链接。我似乎无法通过 http://www.bestechvideos.com/2008/06/08/dimecasts-net-introduction-to-mocking-with-moq 观看视频 [断开的链接]

具体来说,我正在尝试确定是否从模拟类中引发了事件。我无法编译 QuickStarts 页面上的事件示例。在 google 群组中,Daniel 解释说 CreateEventHandler 只能处理 EventHandler<TEventArgs> 类型的事件,但即使这样我也无法编译代码。

更具体地说,我有一个实现INotifyChanged 的类。

public class Entity : INotifyChanged
{
    public event PropertyChangingEventHandler PropertyChanging;

    public int Id 
      { 
          get {return _id;}
          set {
                 _id = value;
                 OnPropertyChanged("Id");
              }
      }

     protected void OnPropertyChanged(string property)
      {
         if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
      }
 etc .....    
}

如何模拟类以测试PropertyChanged 事件是否被触发?我无法将事件重写为public event EventHandler<PropertyChangedEventArgs>,因为我收到此错误:

错误 1 ​​'CoreServices.Notifier' 没有实现接口成员 System.ComponentModel.INotifyPropertyChanged.PropertyChanged'。 “CoreServices.Notifier.PropertyChanged”无法实现“System.ComponentModel.INotifyPropertyChanged.PropertyChanged”,因为它没有“System.ComponentModel.PropertyChangedEventHandler”的匹配返回类型。

【问题讨论】:

  • 显示的错误是视觉工作室/编译器错误。只需从 bin 文件夹中删除所有内容并重建即可。
  • 我的答案中指向Moq Mocking 简介的链接已修复。
  • 链接被破坏(再次)
  • 同意 Moq 主页对于刚接触框架的人来说真的很糟糕。
  • @Martijn Pieters 或其他人请重新打开此问题

标签: c# .net testing mocking moq


【解决方案1】:

Moq 的最新文档现已在 github wiki 页面上提供:

https://github.com/Moq/moq4/wiki/Quickstart

以前他们在 Google Code 上。除了 wiki 和其他在线资源之外,Moq binary download 中还包含 Windows .CHM 帮助文件格式的完整文档,链接自 the Moq homepage

【讨论】:

【解决方案2】:

你看过Introduction to Mocking with Moq吗?这是使用 Moq 的介绍性概述,适用于那些不熟悉一般模拟或 Moq 框架本身的人。

【讨论】:

    【解决方案3】:

    您是否阅读过https://github.com/Moq/moq4/wiki/Quickstart 的链接页面? 例如this one(可能已移至stephen walthers personal blog

    【讨论】:

      【解决方案4】:

      我正在尝试确定某个事件是否是从被模拟对象中引发的 类。

      你是吗?或者您是否试图确定是否设置了 Id 属性?请记住,默认情况下,模拟没有任何行为。它不会引发通知事件。

      我愿意:

      const int ExpectedId = 123;
      mockEntity.VerifySet(x => x.Id = ExpectedId);
      

      这假设 Entity 实现了一个接口;一个例子:

      public interface IKeyedEntity
      {
          int Id { get; set; }
      }
      

      也就是说,如果Entity 是一个没有有趣行为的POCO,我既不会实现接口(@98​​7654329@ 除外)也不会模拟它。使用实际的Entity 实例进行测试(只是不要使用数据库)。为服务和复杂依赖项保留模拟。

      有关起订量的更多功能,请参阅

      Old style imperative mocks vs moq functional specificationsMock.Of - how to specify behavior? (thread)。我还发布了我自己的 Moq v4 functional specifications 示例。

      【讨论】:

        猜你喜欢
        • 2015-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-30
        • 2012-08-24
        • 2020-11-18
        相关资源
        最近更新 更多