InfoQ

InfoQ

News

My Bookmarks

Login or Register to enable bookmarks for unlimited time.

The content has been bookmarked!

There was an error bookmarking this content! Please retry.

Moq .NET Mocking Library

Posted by Al Tenhundfeld on Aug 12, 2008

Sections
Development
Topics
.NET ,
Unit Testing ,
.NET Framework
Tags
TDD ,
Mocks ,
Testing
Moq is a mocking library for .NET designed and developed to utilize .NET 3.5 features, e.g., Linq expression trees and lambda expressions. Moq's goal is to be simple and straightforward, allowing a natural integration into existing unit tests, instead of forcing developers to rewrite tests or learn extensive Record/Replay mocking frameworks. Moq targets those developers who are writing tests but are not using mocking frameworks. The design principle behind Moq is to be refactoring friendly with a very low barrier of entry.

Moq offers the following features:
  • Strong-typed: no strings for expectations, no object-typed return values or constraints
  • Unsurpassed VS intellisense integration: everything supports full VS intellisense, from setting expectations, to specifying method call arguments, return values, etc.
  • No Record/Reply idioms to learn. Just construct your mock, set your expectations, use it and optionally verify them
  • VERY low learning curve as a consequence of the previous three points. For the most part, you don't even need to ever read the documentation.
  • Granular control over mock behavior with a simple MockBehavior enumeration (no need to learn what's the theoretical difference between a mock, a stub, a fake, a dynamic mock, etc.)
  • Mock both interfaces and classes
  • Override expectations: can set default expectations in a fixture setup, and override as needed on tests
  • Pass constructor arguments for mocked classes
  • Intercept and raise events on mocks
  • Moq is open source and eager for more contributors. Along with the source, the binaries and a getting started guide are hosted on Google Code.

    Daniel Cazzulino, Moq's active maintainer, has a series of posts that provide his reasoning for creating Moq and several good examples of how to use Moq effectively.

    No comments

    Watch Thread Reply

    Educational Content

    New-age Transactional Systems - Not Your Grandpa's OLTP

    John Hugg discusses high volume transaction processing applications with high and low frequency profiles, and how VoltDB can be used for that purpose.

    Cool Code

    Kevlin Henney examines code samples to see what can be learned from them starting from the premise that one won’t write great code unless he knows how to read it.

    Collaboration: At the Extremities of Extreme

    Jason Ayers share the observations he made watching a team of developers collaborating in real time on the same code base, pushing XP, pair programming and continuous integration to their extremes.

    Yesod Web Framework

    Michael Snoyman presents Yesod, a web framework written in Haskell and containing a web server, templating, ORM, libraries (templating, gravatar, etc.).

    Transactions without Transactions

    Richard Kreuter and Kyle Banker on how to avoid classical RDBMS transactional systems by using compensation mechanisms, transactional messaging or transactional procedures.

    Attila Szegedi on JVM and GC Performance Tuning at Twitter

    Attila Szegedi talks about performance tuning Java and Scala programs at Twitter: how to approach GC problems, the importance of asynchronous I/O, when to use MySQL/Cassandra/Redis, and much more.

    10 tips on how to prevent business value risk

    One category of risk that project teams need to ensure they address is business value failure – delivering a product that fails to provide value for the business investor.

    Interview: Software Systems Architecture: Working With Stakeholders Using Viewpoints and Perspectives

    InfoQ spoke to the authors of Software Systems Architecture on a couple of new topics, the System Context viewpoint and Agile, which have been added to the second edition.