Create Raven Test with RavenTestBase

In case you see an issue with RavenDB and you can to report it, the bast way is to create a failing test and send it to us so we could look into it and fix it as fast as possible.

How to Create a Failing Test

1) Create a new Console Application
2) Add the NuGet Package "RavenDB Test Helpers"
Add RavenDB Test Helpers NuGet Package
3) Create a test like this:

class RavenTestSample : RavenTestBase
{
	[Fact]
	public void ThisIsMyTest()
	{
		//Write you test here
		//Don't forget to use Asserts
	}
}

When you inherit from the class "RavenTestBase" you get the following methods to help you create your test:

public EmbeddableDocumentStore NewDocumentStore(bool runInMemory = true, string requestedStorage = null, ComposablePartCatalog catalog = null,
												bool deleteDirectory = true,	bool deleteDirectoryOnDispose = true);
//Creates an embedded document store

public IDocumentStore NewRemoteDocumentStore(bool fiddler = false);
//Creates a new document store

public static void WaitForIndexing(IDocumentStore store);
//Waits for all indexes to be non stale

public static void WaitForUserToContinueTheTest(EmbeddableDocumentStore documentStore, bool debug = true);
//Only active when debugging a test, will load the studio for the tested store

protected void WaitForUserToContinueTheTest();
//Only active when debugging a test, will load the studio for a server in port 8079

In addtion you have several virtual method you could use:

protected virtual void ModifyStore(DocumentStore documentStore);

protected virtual void ModifyStore(EmbeddableDocumentStore documentStore);

protected virtual void ModifyConfiguration(RavenConfiguration configuration);

Here is an example of a full test:

public class IndexTest : RavenTestBase
{
	[Fact]
	public void CanIndexAndQuery()
	{
		using (var store = NewDocumentStore())
		{
			new SampleData_Index().Execute(store);

			using (var session = store.OpenSession())
			{
				session.Store(new SampleData
				{
					Name = "RavenDB"
				});

				session.SaveChanges();
			}

			using (var session = store.OpenSession())
			{
				var result = session.Query<SampleData, SampleData_Index>()
					.Customize(customization => customization.WaitForNonStaleResultsAsOfNow())
					.FirstOrDefault();

				Assert.Equal(result.Name, "RavenDB");
			}
		}
	}
}

public class SampleData
{
	public string Name { get; set; }
}

public class SampleData_Index : AbstractIndexCreationTask<SampleData>
{
	public SampleData_Index()
	{
		Map = docs => from doc in docs
					  select new
					  {
						  doc.Name
					  };
	}
}

After you have the test finished, send the "cs" file with the failing test to RavenDB Support