mountebank - over the wire test doubles

the apothecary

Client Libraries

While mountebank speaks REST, he truly loves your native language and has no desire to make you learn another language. If you have a native library you'd like others to be able to use, please send mountebank a note on the support page or through a pull request to this page and he will add it to the list below.

Some of these are still in their early stages. Feel free to help the authors out ;>

Language Name Author
C# MbDotNet Matthew Herman
Clojure Charlatan Matthew Daley
Delphi mountebank-delphi Jamie Geddes
F# MbDotNet.FSharp Matthew Herman
Go GoBank Erkan
mbgo Senseye
Java javabank James Thomas
JavaScript mountebank-helper Alex
Perl Test::Mountebank Dagfinn Reiersøl
PHP Juggler Andrejs Mironovs
mountebank-api-php Demyanovsky Ruslan
mountebank-php Abraham Vallez
Python mountepy Michał Bultrowicz
py-mountebank Kevin Qiu
mountebank-python Alex Holyoke
mbtest Simon Brunning
mounty Vasile Pop
Ruby mountebank-gem Michael Cheng
Shell mountebank-sh Sergi Bech Robleda
TypeScript ts-mountebank Angela Evans

Persistence Stores

By default, mountebank stores everything in memory, which becomes a performance bottleneck at scale. The --datadir option creates a local file-based data store, but the community has created (or is creating) more performant and robust options using first-class databases using the --impostersRepository command line option.

Database Name Author
Redis mountebank-redis-repository Boris Zhidkov
Mongo mountebankMongo Isabelle Carter (who created the plugin capability)

Build Plugins

Since mb is another process to manage during your build, having a plugin for your build tool is handy. If you have a plugin, please add it to this page or let me know about it.

Build tool Name Author
Grunt grunt-mountebank Brandon Byars
Gradle mountebank-gradle Andrew Dean
Maven mountebank-maven-plugin James Thomas

Build Plugin Implementation Notes

As of v1.4.3, mb writes the pidfile ( by default, although it can be overridden on the command line) only after it has fully initialized, including binding to the socket and initializing any imposters passed in a config file. You can use this fact to wait for the pidfile creation before returning from a build task to guarantee initialization before the next task runs.

Also note that the command to actually run mountebank can vary depending on both the platform and the installation package. To support all options, you will need to dynamically determine the executable command to run.

See the grunt-mountebank code that mountebank uses for its build for an example.

User Interfaces

The following help drive mountebank through a user interface.

Name Author
Mountebank-UI Don Henton
Disguise Opus Software

Additional tools

The following are higher level tools that augment mountebank with additional functionality.

Name Description Author
TestDoubles Adds cluster support, named REST APIs, persisted request/response pairs, enhanced command line interface (CLI), with packaging mechanisms including Node.js, Docker, Vagrant, PM2 etc CA Technologies
swagger-bank A library to bridge Swagger API specifications and the Mountebank Test-Double tool Alex