JUnitParams can be very useful in any test type (UnitTest, IntegrationTest, DistributedTest).
1) Add these junitparams
imports:
import junitparams.JUnitParamsRunner; import junitparams.Parameters; import junitparams.naming.TestCaseName;
2) Add {{@RunWith(JUnitParamsRunner.class)}}
to your test class:
@Category(DistributedTest.class) @RunWith(JUnitParamsRunner.class) @SuppressWarnings("serial") public class CreateAndLocalDestroyInTXRegressionTest implements Serializable {
3) Use both @Parameters
and @TestCaseName
on test method(s) using parameters:
@Test @Parameters({"true", "false"}) @TestCaseName("{method}({params})") public void userFilesAreBackedUp(boolean useRelativePath) throws Exception {
This results in nicer test names in the results:
FileSystemBackupWriterTest (org.apache.geode.internal.cache.backup) userFilesAreBackedUp(true) userFilesAreBackedUp(false)
You can also use Strings that represent enums
:
private enum LocalOperation { LOCAL_DESTROY((region) -> region.localDestroy(KEY), TXStateStub_LOCAL_DESTROY_NOT_ALLOWED_IN_TRANSACTION), LOCAL_INVALIDATE((region) -> region.localInvalidate(KEY), TXStateStub_LOCAL_INVALIDATE_NOT_ALLOWED_IN_TRANSACTION); ... } @Test @Parameters({"LOCAL_DESTROY", "LOCAL_INVALIDATE"}) @TestCaseName("{method}({params})") public void createAndLocalOpShouldCreateEventWithNewValue(final LocalOperation operation) {
And the results of running with enums
look like this:
CreateAndLocalDestroyInTXRegressionTest createAndLocalOpShouldCreateEventWithNewValue CreateAndLocalDestroyInTXRegressionTest.createAndLocalOpShouldCreateEventWithNewValue(LOCAL_DESTROY) CreateAndLocalDestroyInTXRegressionTest.createAndLocalOpShouldCreateEventWithNewValue(LOCAL_INVALIDATE)
Some good examples:
- ClientDeserializationCopyOnReadRegressionTest
- CreateAndLocalDestroyInTXRegressionTest
- FileSystemBackupWriterTest