Writing a single unit test for multiple implementations of an interface Code Answer

Hello Developer, Hope you guys are doing great. Today at Tutorial Guruji Official website, we are sharing the answer of Writing a single unit test for multiple implementations of an interface without wasting too much if your time.

The question is published on by Tutorial Guruji team.

I have an interface List whose implementations include Singly Linked List, Doubly, Circular etc. The unit tests I wrote for Singly should do good for most of Doubly as well as Circular and any other new implementation of the interface. So instead of repeating the unit tests for every implementation, does JUnit offer something inbuilt which would let me have one JUnit test and run it against different implementations?

Using JUnit parameterized tests I can supply different implementations like Singly, doubly, circular etc but for each implementation the same object is used to execute all the tests in the class.

Answer

With JUnit 4.0+ you can use parameterized tests:

  • Add @RunWith(value = Parameterized.class) annotation to your test fixture
  • Create a public static method returning Collection, annotate it with @Parameters, and put SinglyLinkedList.class, DoublyLinkedList.class, CircularList.class, etc. into that collection
  • Add a constructor to your test fixture that takes Class: public MyListTest(Class cl), and store the Class in an instance variable listClass
  • In the setUp method or @Before, use List testList = (List)listClass.newInstance();

With the above setup in place, the parameterized runner will make a new instance of your test fixture MyListTest for each subclass that you provide in the @Parameters method, letting you exercise the same test logic for every subclass that you need to test.

We are here to answer your question about Writing a single unit test for multiple implementations of an interface - If you find the proper solution, please don't forgot to share this with your team members.

Related Posts

Tutorial Guruji