MOQ文档在哪里?

71

我该在哪里找到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页面上关于事件的示例编译。在谷歌小组中,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>,因为我收到这个错误:

Error 1 “CoreServices.Notifier”没有实现接口成员“System.ComponentModel.INotifyPropertyChanged.PropertyChanged”。“CoreServices.Notifier.PropertyChanged”不能实现“System.ComponentModel.INotifyPropertyChanged.PropertyChanged”,因为它没有匹配的返回类型“System.ComponentModel.PropertyChangedEventHandler”。


显示的错误是 Visual Studio/编译器的一个 bug。只需从 bin 文件夹中删除所有内容并重新构建即可。 - CodingBarfield
链接又坏了。 - PPC
7
同意Moq官网对于刚接触该框架的人来说真的非常糟糕。 - BentOnCoding
1
@Martijn Pieters或其他人请重新打开这个问题。 - anatol
目前关闭此问题的理由是:“我们不允许寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,使其能够通过事实和引用来回答。”这是为了那些没有关闭/重新打开权限的人的利益。 - Andrew Grimm
显示剩余2条评论
4个回答

39

1
最新版本(4.0.10827)的直接下载链接:http://moq.googlecode.com/files/Moq.4.0.10827.Final.zip - vossad01
非常古雅和特定于平台,但相当实用! - O'Rooney
18
没有足够的细节来称之为“文档”。 - anatol

16

你看过使用Moq进行模拟介绍吗?这是一个关于如何使用Moq的入门概述,适用于那些对Mocking或者Moq框架本身都比较陌生的人。


5

1
我正在尝试确定事件是否来自模拟类。
你是吗?还是你想确定Id属性是否已设置?请记住,默认情况下,模拟没有行为。它不会引发通知事件。
我会这样做:
const int ExpectedId = 123;
mockEntity.VerifySet(x => x.Id = ExpectedId);

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

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

话虽如此,如果Entity是一个没有有趣行为的POCO,我既不会实现接口(除了INotifyChanged),也不会模拟它。使用实际的Entity实例进行测试(只是不要使用数据库)。将模拟保留给服务和复杂依赖项。

有关更多Moq功能,请参见

旧式命令式模拟与moq功能规范Mock.Of-如何指定行为?(线程)。我还发布了自己的Moq v4功能规范示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接