An updated version of EasyTest Core(1.3.2) module is now available in Maven Central Repository
Some of the companies using Easytest
For a more indepth into the new features or for any queries, please contact anujkumar@easetech.org
Display annotation is introduced to limit the input key=value pair that is displayed as part of the test method name. Until now, all the test data that is used to run the test method was displayed in the IDE, in the form : testMethodName{paramName=paramVal,paramName=paramVal} Now a user can choose to show only certain fields in the test method name. Look at Display annotation Usage to see how it can be used at class level and Display at method level to see how it can be overridden at method level.
Format annotation is introduced for the user to specify the date, datetime and time format to be used to convert date/datetime/time values. Initially EasyTest was parsing the date strings randomly and it was not efficient. The specified date/datetime/time formats are also available to the custom converters. Look at Format annotation usage and Test class where it is applied.
New attribute convertEmptyToNull added to the @Param annotation. This attribute specifies whether the empty values (specified using "")in the test data be converted by EasyTest to Null values or not. Default value is false. Example usage here.
New Attribute writeData added to the DataLoader annotation. This attribute tells EasyTest whether the test data be written to the file or not. Default value is true. A new System property to specify whether data should be written or not(using boolean true or false) is also added and is named : "easytest.writeData". Example usage here.
A new and extremely powerful annotation TestPolicy is now added. This annotation lets the user define a Policy for his test in a separate file and then reuse this policy in multiple tests. This annotation takes a single argument of type class that defines the policy class that this test method should use. The main benefit of TestPolicy is that it gives user an opportunity to reuse a lot of existing annotations and also de-clutters the main test. Here is the javadoc for TestPolicy annotation to see what all annotations it supports.
EasyTestSuite class along with ParallelSuite annotation is now available that is an extension of Suite Junit class and provides the user with the ability to run the suite classes in parallel as well as the methods inside the testclasses in parallel. You can see it in action here.
Besides the above major enhancements, there have been few bug fixes as well as code refactoring that went into this major release.
Version 1.2.5 is mostly some bug fixes and code cleaning release. Importantly, from a user's perspective, anyone writing their own custom loaders can now convert the data into specific Object during read time itself, which simplifies their test cases further in the sense that they dont need to write/register specific converters. Although this practice is not encouraged as it may lead to coupled, hard to refactor code, but in certain scenarios it is also useful. One of the clients of EasyTest had this requirement and so it has now been supported.
A new method level annotation Repeat. This annotation can be used to repeat the same test multiple times. This annotation is useful in scenarios where you may quickly want to load test your application. Here is how this annotation can be used.
public class TestRepeat {
@Test
@Repeat(times=20)
public Item findItemTest(@Param(name='itemId')String itemId) {
Item result = testSubject.findItem(itemId)
Assert.notNull(result);
return result;
}
Notice the Repeat annotation at the method level. When EasyTest sees this annotation, it creates "n" different instances of the test method, where "n" is defined by the "times" attribute of the Repeat annotation. In the above case, EasyTest will create 20 unique instances of the above test method.
There is also a System Property test.repeatCount that can be used while running tests from command line. When this property is set, EasyTest simply creates "n" instances of each test defined in the test class, where "n" is defined by the value of the above System Property. System Property takes precedence over Repeat annotation. It means that if both annotation and system property is present, then System Property's value will be used.
Another important addition to EasyTest is a new interface for Converter called ParamAwareConverter This interface introduces a new convert method that is now aware of the Parameter name that it is trying to convert. Users of the original Converter will not be affected and can continue to use it like before. If you are using AbstractConverter class to define your converters then you are in luck. You now get the name parameter for free by calling the getParamName method of the AbstractConverter class. Thanks to Josef Sustacek for his contribution.
Yet another addition to the library is the support for global/default input test data in the XML file. So a user can now specify the repeatable input data globally once, instead of defining the same test data again and again for each test method. Thanks again to Josef Sustacek for his contribution. You can have a look at an example here.
You can always refer the WIKI pages of EasyTest project for a general idea and more indepth detail, or can directly mail me at anujkumar@easetech.org for any questions/clarifications/suggestions.
A new annotation Duration is introduced. This annotation is introduced to capture the time taken by the method under test and assert it with the user specified maximum time. Thus a user can now say that the test should fail if the method it is trying to test takes more than "x"milliseconds.
Let's look at an example
public class TestDuration {
@Duration(timeInMillis=20)
ItemService testSubject;
@Test
public Item findItemTest(@Param(name='itemId')String itemId) {
Item result = testSubject.findItem(itemId)
Assert.notNull(result);
return result;
}
In the above case, if the method findItem of class ItemService took more than 20 milli seconds, then the test method will fail specifying that the method took more time than expected.
A second use of this annotation is if a user wants to override the value of timeInMillis attribute of Duration annotation for a specific Test. In such a case, he can specify the Duration annotation at the Test Method level and EasyTest will override the value of timeInMillis only for that test. Lets look at an example :
public class TestDuration {
@Duration(timeInMillis=20)
ItemService testSubject;
@Test
public Item findItemTest(@Param(name='itemId')String itemId) {
Item result = testSubject.findItem(itemId)
Assert.notNull(result);
return result;
@Test
@Duration(timeInMillis=50 , forClass=ItemService.class)
public List<Item> getItemsTest(@Param(name='itemType')String itemType) {
List<Item> result = testSubject.getItems(itemType)
Assert.notNull(result);
return result;
}
In the above case, we are telling EasyTest that method getItems of class ItemService should not take more than 50 milliseconds when run inside the test method with name getItemsTest.
In order to get the complete picture, have a look at the Java docs of Duration annotation.
@DataLoader(filePaths = {"${my.data.file}" , "${my.second.data.file}"})
Using the above way, a user can specify properties of the above variables "my.data.file" and "my.second.data.file" as System property using -D option of Java System Properties.
A new System Property "testDataFiles" to provide a comma separated list of input test data files at runtime. In order to use this option simply specify @DataLoader annotation at the top of your class without any input data. Thus in such a case DataLoader annotation acts as a marker annotation telling the EasyTest system that it has to fetch the value of filePaths attribute from the system property "testDataFiles".
NOTE If a user has specified both "testDataFiles" System Property AND a value for "dataFiles" attribute, then the System Property files(specified using testDataFiles System Property) will override the files specified using the "dataFiles" attribute of DataLoader annotation.
Besides regular clean up stuff, one of the important things that changed in 1.2.1 is the way Test methods are now instantiated and their data handled. Until version 1.2, all the test methods were running in a single test class instance, which, normally was not a problem, but caused some concern with JUnit Rules, especially with Rules that depended on a new instance for each test method (ErrorCollector for eg.) With 1.2.1 that has changed and each test method
$ claude mcp add easytest-core \
-- python -m otcore.mcp_server <graph>