MOQ文件在哪里?

时间:2008-10-23 19:44:16

标签: c# .net testing mocking moq

我在哪里可以找到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'。

4 个答案:

答案 0 :(得分:30)

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

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

以前他们使用的是Google Code。除了wiki和其他在线资源之外,还有来自Moq binary downloadthe Moq homepage中包含的Windows .CHM帮助文件格式的完整文档。

答案 1 :(得分:15)

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

答案 2 :(得分:4)

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

答案 3 :(得分:1)

  

我正在尝试确定是否从被嘲笑的事件中引发了一个事件   类。

你是吗?或者您是否正在尝试确定Id属性是否已设置?请记住,默认情况下,模拟没有行为。它没有提出通知事件。

我会这样做:

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

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

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

那就是说,如果EntityPOCO而没有任何有趣的行为,我既不会实现接口(INotifyChanged除外)也不会嘲笑它。使用实际的Entity实例进行测试(只是不要使用数据库)。保留对服务和复杂依赖项的模拟。

有关更多Moq功能,请参阅

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