I have a query about using parameterized tests for my unit testing of my APIs. Now instead of building an arraylist like
Arrays.asList(new Object[]{
{1},
Have a look at the junitparams project, especially this example. It will show you how to use a CSV file for parameter input. Here's a short example:
My test.csv file:
1, one
2, two
3, three
My test:
package com.stackoverflow.sourabh.example;
import static org.junit.Assert.assertTrue;
import junitparams.FileParameters;
import junitparams.JUnitParamsRunner;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(JUnitParamsRunner.class)
public class FileReadingParameterizedTest {
@Test
@FileParameters("src/test/resources/test.csv")
public void testWithCSV(int number, String name) {
assertTrue(name + " is not at least two", number >= 2);
}
}
Obviously the first test will fail, producing the error message one is not at least two.
@RunWith(JUnitParamsRunner.class)
public class FileParamsTest {
@Test
@FileParameters("src/test/resources/test.csv")
public void loadParamsFromFileWithIdentityMapper(int age, String name) {
assertTrue(age > 0);
}
}
JUnitParams has support for loading the data from a CSV file.
CSV File will contain
1,true
2,false
In Spring-boot Java framework, you can use the Value
annotation conveniently within the class,
@Component
public class MyRunner implements CommandLineRunner {
@Value("classpath:thermopylae.txt") //Annotation
private Resource res; // res will hold that value the `txt` player
@Autowired
private CountWords countWords;
@Override
public void run(String... args) throws Exception {
Map<String, Integer> words = countWords.getWordsCount(res);
for (String key : words.keySet()) {
System.out.println(key + ": " + words.get(key));
}
}
}
Source