Saturday, August 23, 2014

jUnit: Dynamic Tests Generation

Dynamic tests generation is useful when you need to run the same set of tests on many different input values or configurations. It can be achieved either using parametrized tests or using theories.

Theories are valuable when you have a bunch of data to be used as parameters and want to run tests on all their combinations. You get less control, but you do not have to write combining and iterating code by yourself. Basics about how theories work are explained on java code geeks (original at java advent calendar), so this post focus on parametrized tests.

Parametrized tests are better when you need to have good control over the input values, e.g. directory with files that are served as an input or a list of meaningful parameters combinations.

Parametrized Tests

Parametrized test is a test case able to accept parameters and a list of all parameter combinations you want it to run at. JUnit goes through the list of parameters, initializes the test case with each of them and then runs all its test methods.

Both GUI and Maven runners then interpret each parametrized test run as a separate test. If some of them fails, it is immediately clear which did failed and how many of them failed.

Example Use Case
Less4j is less to css compiler, so each of its tests is defined by an input less file and an expected css file. The compiler is run on input file and its output is compared to the expected css. If they match, test is passed.

All .less files are stored in a directory. Parametrized test case reads that directory and creates one jUnit test for each file. Therefore we can add new tests just by creating new .less and .css, run tests via "run all" button and see new test in all reports.

How to Use It
Parametrized test case must have following things:
  • a @RunWith(Parameterized.class) class annotation,
  • a constructor that accepts test case parameters,
  • a static method annotated with @Parameters to generate parameters,
  • test methods that runs on parameters supplied in constructor.

Constructor
Parametrized constructor must have at least one parameter. For example, the compiler test case can take input less as a first argument and expected compiled css as second argument. The third argument name is ignored and will be explained later:
@RunWith(Parameterized.class)
public class ParametrizedTest {

  public ParametrizedTest(String less, String expectedCss, String name) {
    this.less = less;
    this.expectedCss = expectedCss;
  }

}

Parameters
The static method generating parameters must return an implementation of the Iterable interface. The iterator returns arrays containing sets of parameters. Each array is used to create one test case instance and objects in it are used as constructor parameters.

For example, following method returns two arrays and thus leads to two test case instances:
@Parameters(name="Name: {2}")
public static Iterable<Object[]> generateParameters() {
  List<Object[]> result = new ArrayList<Object[]>();
  result.add(new Object[] {"less", "css", "pass"});
  result.add(new Object[] {"less", "error", "fail"});
  return result;
}

The name annotation parameter is optional. Its value will be shown in GUI or maven report as the test case name. The {n} is placeholder for n-th array value. They are indexed from 0, so the first test case will be named Name: pass and second test case will be named Name: fail.

Test Methods
Parametrized test case can have any number of tests and they must be annotated with @Test annotation:
@Test
public void testCss() { //dummy test method
  String actualCss = compile(less);
  assertEquals(expectedCss, actualCss);
}

@Test
public void testSourceMap() { //another test method
  String actualCss = compile(less);
  assertEquals(expectedCss, actualCss);
}

private String compile(String less) { //dummy compile method
  return "css"; 
}  

Output
If you run the above test class, the JUnit view will show following structure:
[F] com.github.sommeri.jUnit4Examples.ParametrizedTest
[ ] |-- [Name: pass]
[ ] |---------------- testCss[Name: pass] 
[ ] |---------------- testSourceMap[Name: pass] 
[F] |-- [Name: fail]
[F] |---------------- testCss[Name: fail] 
[F] |---------------- testSourceMap[Name: fail] 

Full Test Case
@RunWith(Parameterized.class)
public class ParametrizedTest {
  
  private String less;
  private String expectedCss;

  public ParametrizedTest(String less, String expectedCss, String name) {
    this.less = less;
    this.expectedCss = expectedCss;
  }
  
  @Parameters(name="Name: {2}")
  public static Iterable<Object[]> generateParameters() {
    List<Object[]> result = new ArrayList<Object[]>();
    result.add(new Object[] {"less", "css", "pass"});
    result.add(new Object[] {"less", "error", "fail"});
    return result;
  }
  
  @Test
  public void testCss() {
    String actualCss = compile(less);
    assertEquals(expectedCss, actualCss);
  }

  @Test
  public void testSourceMap() {
    String actualCss = compile(less);
    assertEquals(expectedCss, actualCss);
  }

  //dummy compile method
  private String compile(String less) {
    return "css"; 
  }  
}

More About jUnit

Following post about jUnit 4 features:

48 comments:

Unknown said...

thx!

Chandra Sekhar Reddy said...

Excellent Information
Yaaron Studios is one of the rapidly growing editing studios in Hyderabad. We are the best Video Editing services in Hyderabad. We provides best graphic works like logo reveals, corporate presentation Etc. And also we gives the best Outdoor/Indoor shoots and Ad Making services.
Best video editing services in Hyderabad,ameerpet
Best Graphic Designing services in Hyderabad,ameerpet­
Best Ad Making services in Hyderabad,ameerpet­

Chandra Sekhar Reddy said...

Nice Post
"Pressure Vessel Design Course is one of the courses offered by Sanjary Academy in Hyderabad. We have offer professional
Engineering Course like Piping Design Course,QA / QC Course,document Controller course,pressure Vessel Design Course,
Welding Inspector Course, Quality Management Course, #Safety officer course."
Piping Design Course in India­
Piping Design Course in Hyderabad
QA / QC Course
QA / QC Course in india
QA / QC Course in Hyderabad
Document Controller course
Pressure Vessel Design Course
Welding Inspector Course
Quality Management Course
Quality Management Course in india
Safety officer course

Unknown said...

If you're looking to lose kilograms then you absolutely have to jump on this totally brand new custom keto meal plan diet.

To design this keto diet service, certified nutritionists, personal trainers, and top chefs united to develop keto meal plans that are effective, suitable, cost-efficient, and satisfying.

Since their launch in early 2019, hundreds of clients have already transformed their figure and health with the benefits a smart keto meal plan diet can give.

Speaking of benefits: in this link, you'll discover eight scientifically-tested ones offered by the keto meal plan diet.

Muhammad said...

I have read so many articles regarding the blogger lovers
however this article is, in fact, a pleasant piece of writing, keep it up Rent a jeep Prado in Pakistan

Dakota Leest said...

Hi there. Very interesting article. I need help with writing dissertation results section. I know I'm getting it. I have asked writers many times. I am glad that I have experience that helps me always find the right way to solve problems.

Anonymous said...

How often do you use additional information? I want to tell you about plagiarism facts https://theplagiarism.com/articles/plagiarism-facts. I always check my essay for plagiarism. It helps to have the best scientific work.

Jeffrey said...

Get expert help from leading writers! https://exclusivethesis.com/writing-a-legal-brief/ will help you with any writing work.

Quickbooks Expert said...

Nice & Informative Blog !
To fix such issue, you must contact our experts via QuickBooks Support Number 1-855-652-7978 and get permanent ways to solve QuickBooks problems. Our team consists of highly qualified professionals who provide the best ways to troubleshoot QuickBooks problems.

Simmyjessure said...

Its so amazing article with nicnfomative information you can get also QuickBooks get solution at

Quickbooks Phone Number

Simmyjessure said...

i m very happy read your informative and knowledgeable blog thanks for provide useful information i have also share your information other planform . we also provide Quickbooks solution you can call at
quickbooks phone number

alexa jone said...

Excellent blog .Thanks For Sharing with us contact at quickbooks phone number for any quickboooks issue

North Carolina said...

Fall back on a professional to solve quickbooks error 15215 for best service Quickbooks Phone Number 1 855-756-1077

Unknown said...

Reach to the customer service team via phone, emails, chat and get the best solution to the error occurred. Call us quickbooks customer service (888) 272-4881

Ohio said...

QuickBooks the simplest, cheapest accounting software that has made accounting life easier and when it itself gets in trouble then we have a team of experts to help you resolve issues with QuickBooks. You can also feel free to contact us if you have any queries or need assistance in resolving the issueQuickBooks expert (855) 377-7767

Minnesota said...

If you have QuickBooks errors or problems that are slowing down your business? QuickBooks Customer Service Number is here to help. We have a team of experienced professionals who will be more than happy to solve any issue that you may have in the shortest time possible.
quickboks customer service(855) 742-7868.

Sarika said...

Thanks for sharing this blog. The content is beneficial and useful. Very informative post. We are also providing the best services click on below links to visit our website.

Oracle Fusion HCM Training
Workday Training
Okta Training
Palo Alto Training
Adobe Analytics Training

Nick mosan said...

The QuickBooks error 15241 can be extremely inconvenient for the user. This issue is generally accompanied by the message “The payroll update failed to finish successfully.” It can occur as a result of a corrupted Microsoft Windows installer or a corrupted QuickBooks desktop installation.

Quickbooks Customer Service said...


Hiiii!!
If you are looking for Quickbooks Customer Service you can reach us at.+1 855-786-5155,NH.

car rental near me said...
This comment has been removed by the author.
DXB said...

DXB offer best discounted rate for Location Voiture Dubai.

Sharon Johnson said...

Wonderful, incredibly thorough, and simple to comprehend profile. the profile. Although there are numerous phony Twitter profile generators available, this one is the best and the original. It's a fun program that enables you to make fictitious Twitter profiles and do anything else for the purpose of amusing others and having a good time. Click here to view this profile and find out more information create fake twitter account.

Tiffanie Pena said...

Your piece was really well-written and well-researched. I valued the degree of detail you offered and the way you clarified complicated ideas using simple language. I maintain a blog at CPS Counter. I was able to increase my game-clicking speed and accuracy by using the CPS test.

gostopsite said...

I want to to thank you for this good read!! I definitely enjoyed every little bit of it.

casinositerank said...

Hello there! This post could not be written any better!

sportstoto365 said...

This is so much hilarious blog, Anyways thanks for posting ideas.

bacarasite said...

Thanks to sharing with us !!!!!!

gwolf said...

An impressive share! I have just forwarded this onto a coworker who had been conducting a little homework on this.

totosafesite said...

Thank YOU for the meal!! But yeah, thanx for spending time to discuss this topic here on your website

Weekly Meal Plan - Meals On Me said...

Nice Post!!
Please look here at Low Carb Meal plan

Majortotosite Top said...

I feel too good to read it this awesome blog.

Oncasinosite Net said...

We have read your blog. People can also visit our website…

Totopick Pro said...

I was very interested in the article. it’s quite inspiring I should admit.

Totosafeguide Com said...

I like visiting you site since I always come across interesting articles like this one.

메이저사이트 said...

Today bloggers publish only about gossips and internet and this is actually frustrating.

gostopsite.com said...

I am so happy to read this.

sportstotomen.com said...

Appreciate your sharing this greatest doc.

19guide03.com said...

I simply stumbled upon your web site and in accession capital to assert.

slotplayground.com said...

I like what you guys are usually up too.

cmriindia.org said...

its really really fastidious piece of writing on building up new weblog.

바카라사이트 추천 said...

It is perfect time to make some plans for the future and it is time to be happy

메이저사이트 said...

I enjoyed browsing this weblog posts. Hoping you write again very soon!

사설 토토사이트 said...

Please keep us up to data like this. Thanks for sharing and Keep on writing.

파워볼사이트 추천 said...

Hello very nice article!! Excellent & Wonderful. I’ll bookmark this website.

카지노사이트 said...

It is in reality a nice and helpful piece of information.

안전놀이터 said...

Please stay us up to date like this. Thanks for sharing.

토토사이트 said...

Hi very nice blog!! Man .. Beautiful .. Wonderful .

파워볼사이트 said...

I am glad to search out so many useful information here in the post, thank you for sharing

Post a Comment