Mongo2Go is a managed wrapper around the latest MongoDB binaries. It targets .NET 4.6 (and .NET Standard 1.6, prerelease package!) and works with Windows, Linux and macOS (last two via Mono). This Nuget package contains the executables of mongod, mongoimport and mongoexport v3.2.7 for Windows, Linux and macOS .
Mongo2Go has two use cases:
- Providing multiple, temporary and isolated MongoDB databases for unit tests (or to be precise: integration tests)
- Providing a quick to set up MongoDB database for a local developer environment
With each call of the static method MongoDbRunner.Start() a new MongoDB instance will be set up. A free port will be used (starting with port 27018) and a corresponding data directory will be created. The method returns an instance of MongoDbRunner, which implements IDisposable. As soon as the MongoDbRunner is disposed (or if the Finalizer is called by the GC), the wrapped MongoDB process will be killed and all data in the data directory will be deleted.
In this mode a single MongoDB instance will be started on the default port (27017). No data will be deleted and the MongoDB instance won’t be killed automatically. Multiple calls to MongoDbRunner.StartForDebugging() will return an instance with the State “AlreadyRunning”. You can ignore the IDisposable interface, as it won’t have any effect. I highly recommend to not use this mode on productive machines! Here you should set up a MongoDB as it is described in the manual. For you convenience the MongoDbRunner also exposes mongoexport and mongoimport which allow you to quickly set up a working environment.
The Mongo2Go Nuget package can be found at https://nuget.org/packages/Mongo2Go/
Search for „Mongo2Go“ in the Manage NuGet Packages dialog box or run:
PM> Install-Package Mongo2Go
or for .NET Core support:
PM> Install-Package Mongo2Go -Version 2.0.0-alpha1 -Pre
in the Package Manager Console.
Example: Integration Test (Machine.Specifications & Fluent Assertions)
[Subject("Runner Integration Test")]
public class when_using_the_inbuild_serialization : MongoIntegrationTest
{
static TestDocument findResult;
Establish context = () =>
{
CreateConnection();
_collection.Insert(TestDocument.DummyData1());
};
Because of = () => findResult = _collection.FindOneAs<TestDocument>();
It should_return_a_result = () => findResult.ShouldNotBeNull();
It should_hava_expected_data = () => findResult.ShouldHave().AllPropertiesBut(d => d.Id).EqualTo(TestDocument.DummyData1());
Cleanup stuff = () => _runner.Dispose();
}
public class MongoIntegrationTest
{
internal static MongoDbRunner _runner;
internal static MongoCollection<TestDocument> _collection;
internal static void CreateConnection()
{
_runner = MongoDbRunner.Start();
MongoServer server = MongoServer.Create(_runner.ConnectionString);
MongoDatabase database = server.GetDatabase("IntegrationTest");
_collection = database.GetCollection<TestDocument>("TestCollection");
}
}
More tests can be found at https://github.com/Mongo2Go/Mongo2Go/tree/master/src/Mongo2GoTests/Runner
Example: Exporting
using (MongoDbRunner runner = MongoDbRunner.StartForDebugging()) {
runner.Export("TestDatase", "TestCollection", @"..\..\App_Data\test.json");
}
Example: Importing (ASP.NET MVC 4 Web API)
public class WebApiApplication : System.Web.HttpApplication
{
private MongoDbRunner _runner;
protected void Application_Start()
{
_runner = MongoDbRunner.StartForDebugging();
_runner.Import("TestDatase", "TestCollection", @"..\..\App_Data\test.json", true);
MongoServer server = MongoServer.Create(_runner.ConnectionString);
MongoDatabase database = server.GetDatabase("TestDatabase");
MongoCollection<TestObject> collection = database.GetCollection<TestObject>("TestCollection");
/* happy coding! */
}
protected void Application_End()
{
_runner.Dispose();
}
}
⚠️ this version has no support for .NET Framework 4.6, please continue to use the stable package v.1.0.0- NEW: first support of .NET Standard 1.6 (#25)
- many thanks to Hassaan Ahmed
- see the Wiki for more information about .NET Core 1.0 / .NET Standard 1.6
- ❗ HELP WANTED ❗
Any help in targeting older versions of the .NET Framework, tuning the build and/or testing this against older .NET Framework versions is highly appreciated!
- v1.0 finally marked as stable
- no changes to 1.0.0-beta4
- changes since last stable version (0.2):
- includes mongod, mongoimport and mongoexport v3.2.7 for Windows, Linux and macOS
- support for Windows, Linux and macOS
- uses MongoDB.Driver 2.3.0
- requires .NET 4.6
- various small bugfixes and improvements
- update to MongoDB.Driver 2.3.0 (#23)
- upgraded to .NET 4.6
- internal change: update MSpec as well and add MSTest Adapter for MSpec (ReSharper console runner doesn't support 4.6)
- many thanks to Alexander Zeitler
- please report any kind of issues here on github so that we can mark 1.0.0 as stable!
- feature: process windows are hidden now (#20)
- bugfix: random folders are used for storing databases (#18)
- many thanks to Matt Kocaj
- please report any kind of issues here on github so that we can mark 1.0.0 as stable!
- fixes for bugs that were introduced by the big rewrite for cross-platform support
- changes from pull request #14, which fixes #12, #13 and #15, many thanks to Mitch Ferrer
- please report any kind of issues here on github so that we can mark 1.0.0 as stable!
- 🎉 NEW: support for Linux and macOS 🎉
- many thanks to Kristofer Linnestjerna from netclean.com for the new cross-platform support
- includes mongod, mongoimport and mongoexport v3.2.7 for Windows, Linux and macOS
- changes from pull request #8, #10, #11 which fixes #9
- please report any kind of issues here on github so that we can mark 1.0.0 as stable!
- includes mongod, mongoimport and mongoexport v3.2.6,
(64bit from win32/mongodb-win32-x86_64-2008plus-3.2.6.zip since 32bit builds are deprecated now) - removes outmoded Strong-Name signing from assemblies (please open an issue if you really need this, see also mspec#190)
- changes from pull request #7, thanks to Mitch Ferrer
- includes mongod, mongoimport and mongoexport v3.0.10 (32bit)
- changes from pull request #5, thanks to Aristarkh Zagorodnikov
- includes mongod, mongoimport and mongoexport v3.0.4 (32bit)
- bug fix #4:
Sometimes the runner tries to delete the database directory before the mongod process has been stopped, this throws an IOException. Now the runner waits until the mongod process has been stopped before the database directory will be deleted. - Thanks Sergey Zwezdin
- includes mongod, mongoimport and mongoexport v2.6.6 (32bit)
- changes from pull request #3
- new:
Start
andStartForDebugging
methods accept an optional parameter to specify a different data directory (default is "C:\data\db") - many thanks to Marc
- includes mongod, mongoimport and mongoexport v2.6.6 (32bit)
- changes from pull request #2
- internal updates for testing the package (not part of the release)
- updated MSpec package so that it would work with the latest VS and R# test runner
- updated Mongo C# Driver, Fluent Assertions, and Moq packages to latest versions
- fixed date handling for mongoimport and mongoexport to pass tests
- many thanks to Jesse Sweetland
- includes mongod, mongoimport and mongoexport v2.2.0 (32bit)
- stable version
- includes mongod, mongoimport and mongoexport v2.2.0-rc1 (32bit)
- second alpha version
- includes mongod, mongoimport and mongoexport v2.2.0-rc1 (32bit)
- first alpha version
- includes mongod, mongoimport and mongoexport v2.2.0-rc1 (32bit)