Over a million developers have joined DZone.
Platinum Partner

NoSQLUnit 0.6.0 Released!

· Java Zone

The Java Zone is brought to you in partnership with ZeroTurnaround. Discover how you can skip the build and redeploy process by using JRebel by ZeroTurnaround.

 NoSQLUnit is a JUnit extension to make writing unit and integration tests of systems that use NoSQL backend easier. Visit official page for more information.

In 0.6.0 release, one new NoSQL system is supported and is HBase.
Apache HBase is an open-source, distributed, versioned, column-oriented store.
As all databases supported by NoSQLUnit, two set of rules are provided to write HBase tests:
First set of JUnit Rules are those responsible of managing database lifecycle; basically starting and stopping HBase instance.
  • Embedded: com.lordofthejars.nosqlunit.hbase.EmbeddedHBase
  • Managed: com.lordofthejars.nosqlunit.hbase.ManagedHBase
Depending on the kind of tests you are implementing (unit test, integration test, deployment tests, …) you will require an embedded, managed or remote approach. Note that for now I haven't implemented an In-Memory approach because there is no in-memory HBase  instance, but embedded strategy for unit tests will be the better one. 
Second set of rules are those responsible of maintaining database into known state;
  • NoSQLUnit Management: com.lordofthejars.nosqlunit.hbase.HBaseRule
And finally default dataset file format in HBase is json. Dataset in HBase is the same used by Cassandra-Unit but not all fields are supported. Only fields available in TSV HBase application can be set into dataset.
We will use a very simple example used in HBase tutorial as an example of how to write unit tests for systems that uses HBase database as backend.
First of all, dataset used to maintain HBase into known state:
    "name" : "person",
    "columnFamilies" : [{
        "name" : "personFamilyName",
        "rows" : [{
            "key" : "john",
            "columns" : [{
                "name" : "age",
                "value" : "22"
                "name" : "car",
                "value" : "toyota"
            "key" : "mary",
            "columns" : [{
                "name" : "age",
                "value" : "33"
                "name" : "car",
                "value" : "ford"
and finally the test case:
public class WhenPersonWantsToKnowItsCar {

	public static EmbeddedHBase embeddedHBase = newEmbeddedHBaseRule().build();
	public HBaseRule hBaseRule = newHBaseRule().defaultEmbeddedHBase(this);
	private Configuration configuration;
	@UsingDataSet(locations="persons.json", loadStrategy=LoadStrategyEnum.CLEAN_INSERT)
	public void car_should_be_returned() throws IOException {

		PersonManager personManager = new PersonManager(configuration);
		String car = personManager.getCarByPersonName("john");
		assertThat(car, is("toyota"));		
Stay in touch with the project and of course I am opened to any ideas that you think that could make NoSQLUnit better.

The Java Zone is brought to you in partnership with ZeroTurnaround. Discover how you can skip the build and redeploy process by using JRebel by ZeroTurnaround.


Published at DZone with permission of Alex Soto , DZone MVB .

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}