Best junit code snippet using org.junit.runner.Description.toString
Source:GenericTestsJUnit4Suite.java
...75 }7677 private IPath getLogPath() {78 if (logPath == null) {79 logPath = new Path(System.getProperty(PROP_REPORT_PATH, Platform.getLocation().removeLastSegments(2).toString()));80 File folder = logPath.toFile();81 if (!folder.exists()) {82 folder.mkdirs();83 }84 }85 return logPath;86 }8788 private String getLogFileName(String baseName) {89 return getPrefixLog() + baseName;90 }9192 private FileWriter getFileWriter() {93 if (testLogWriter == null) {94 File fullLogFile = getLogPath().append(getLogFileName(FULL_LOG_FILE)).toFile();95 try {96 testLogWriter = new FileWriter(fullLogFile, true);97 } catch (IOException e) {98 // nothing99 }100 }101 return testLogWriter;102 }103104 private RunListener runListener = new RunListener() {105106 /*107 * (non-Javadoc)108 * 109 * @see org.junit.runner.notification.RunListener#testStarted(org.junit.runner.Description)110 */111 @Override112 public void testStarted(Description description) throws Exception {113 printBeforeTest(description);114 }115116 /*117 * (non-Javadoc)118 * 119 * @see org.junit.runner.notification.RunListener#testFinished(org.junit.runner.Description)120 */121 @Override122 public void testFinished(Description description) throws Exception {123 printAfterTest(description);124 nbTestExecuted++;125 }126127 @Override128 public void testFailure(Failure failure) throws Exception {129 processFailure(failure);130 }131 };132133 static final TalendJunitsTestCollector ttc = new TalendJunitsTestCollector();134135 public GenericTestsJUnit4Suite(Class<?> klass) throws InitializationError {136 super(klass, ttc.getTests());137138 for (Class<?> classToTest : ttc.getTests()) {139 listOfClassesToExecute.add(classToTest.getName());140 }141 }142143 /*144 * (non-Javadoc)145 * 146 * @see org.junit.runners.Suite#runChild(org.junit.runner.Runner, org.junit.runner.notification.RunNotifier)147 */148 @Override149 protected void runChild(Runner runner, RunNotifier notifier) {150 printBeforeTestClass(runner);151 super.runChild(runner, notifier);152 printAfterTestClass(runner);153 }154155 protected void appendToLogFile(String log) {156 FileWriter fileWriter = getFileWriter();157 if (fileWriter != null) {158 try {159 fileWriter.append(log);160 fileWriter.flush();161 } catch (IOException e) {162 // print in console?163 e.printStackTrace();164 }165 }166 }167168 /*169 * (non-Javadoc)170 * 171 * @see org.junit.runners.ParentRunner#run(org.junit.runner.notification.RunNotifier)172 */173 @Override174 public void run(RunNotifier runNotifier) {175 beforeRun(runNotifier);176 super.run(runNotifier);177 afterRun(runNotifier);178 }179180 protected void beforeRun(RunNotifier runNotifier) {181 runNotifier.addListener(runListener);182 }183184 protected void afterRun(RunNotifier runNotifier) {185 logDetailsAfterRun();186 }187188 protected void logDetailsAfterRun() {189 File sumUpFile = getLogPath().append(getLogFileName(SUM_UP_FILE)).toFile();190191 FileWriter sumUpWriter = null;192 try {193 sumUpWriter = new FileWriter(sumUpFile);194 writeSumUpHeader(sumUpWriter);195 writeSumUpFailedDetails(sumUpWriter);196 } catch (IOException e) {197 StringBuffer buff = new StringBuffer();198 buff.append("********************************************************");199 buff.append(CR);200 buff.append("Error when write sum up file for junits");201 buff.append(CR);202 if (e.getMessage() != null) {203 buff.append("--------------------------------------------------------");204 buff.append(CR);205 buff.append("Exception:" + e.getMessage());206 buff.append("********************************************************");207 buff.append(CR);208 }209 appendToLogFile(buff.toString());210 } finally {211 if (sumUpWriter != null) {212 try {213 sumUpWriter.close();214 } catch (IOException e) {215 // do nothing216 }217 }218 FileWriter logWriter = getFileWriter();219 if (logWriter != null) {220 try {221 logWriter.close();222 } catch (IOException e) {223 //224 }225 }226 }227 }228229 protected void writeSumUpHeader(FileWriter writer) throws IOException {230 writer.append(nbTestExecuted + " test executed.");231 writer.append(CR);232 }233234 protected void writeSumUpFailedDetails(FileWriter writer) throws IOException {235 if (nbTestFailed == 0) {236 writer.append("no test failed.");237 writer.append(CR);238 } else {239 writer.append(nbTestFailed + " tests failed.");240 writer.append(CR);241 writer.append("List of classes/methods in error bellow. For more details please check on hudson directly.");242 writer.append(CR);243 writer.append("------------------------------------ Error details ------------------------------------");244 writer.append(CR);245 writer.flush();246 List<String> errorClassMethods = new ArrayList<String>(classMethodErrors);247 Collections.sort(errorClassMethods);248 for (String one : errorClassMethods) {249 writer.append(one);250 writer.append(CR);251 }252 writer.flush();253254 if (mockErrors.length() > 0) {255 writer.append(CR);256 writer.append("------------------------------------ Mock errors ------------------------------------");257 writer.append(mockErrors.toString());258 }259 }260 }261262 /**263 * @param runner264 */265 private void printAfterTestClass(Runner runner) {266 StringBuffer buff = new StringBuffer();267 buff.append("|====================================================");268 buff.append(CR);269 appendToLogFile(buff.toString());270 }271272 /**273 * @param runner274 */275 private void printBeforeTestClass(Runner runner) {276 long usedMemory = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();277278 StringBuffer buff = new StringBuffer();279 buff.append("|====================================================");280 buff.append(CR);281 buff.append("| [memory :" + usedMemory + "b] - Start test class: " + runner.getDescription());282 buff.append(CR);283 listOfClassesToExecute.remove(runner.getDescription().getClassName());284 appendToLogFile(buff.toString());285 }286287 /**288 * @param description289 */290 private void printAfterTest(Description description) {291 appendToLogFile("|" + format.format(new Date()) + "=> Finish: " + description.getMethodName() + CR);292 }293294 /**295 * @param description296 */297 private void printBeforeTest(Description description) {298 appendToLogFile("|" + format.format(new Date()) + "=> Start: " + description.getMethodName() + CR);299 }300301 @Override302 protected List<Runner> getChildren() {303 if (finalRunnersList.isEmpty()) {304 List<Runner> runners = super.getChildren();305 for (Runner runner : runners) {306 try {307 final String className = runner.getDescription().getClassName();308 listOfClassesToExecute.remove(className);309 // if no exception here, add test to final list310 finalRunnersList.add(runner);311 } catch (Exception e) {312 mockErrors.append("* One test failed certainly because of PowerMock (check full log for detail)");313 mockErrors.append(CR);314 }315 }316317 StringBuffer buff = new StringBuffer();318 if (!listOfClassesToExecute.isEmpty()) {319 buff.append("-------- Classes not executed (certainly problem with powermock) ---------");320 buff.append(CR);321 for (String className : listOfClassesToExecute) {322 buff.append(className);323 buff.append(CR);324 }325 buff.append("---------------------------------------------------------------------------");326 buff.append(CR);327 appendToLogFile(buff.toString());328 }329 }330331 return finalRunnersList;332 }333334 protected void processFailure(Failure failure) {335 String classMethodName = failure.getDescription().getClassName() + "." + failure.getDescription().getMethodName();336 if (!classMethodErrors.contains(classMethodName)) {337 nbTestFailed++;338 classMethodErrors.add(classMethodName);339 appendToLogFile(" **** Test Failed ****" + CR);340 }341 }
...
Source:ReportListener.java
...108 Description description = failure.getDescription();109 Report info = executions.peek(description);110 info.setElapsedTime((endTime - startTime) / 1000d);111 info.setFailure(failure);112 info.setOut(toString(out));113 info.setErr(toString(err));114 }115 /*116 * (non-Javadoc)117 * @see org.junit.runner.notification.RunListener#testAssumptionFailure(org.junit.runner.notification.Failure)118 */119 @Override120 public void testAssumptionFailure(Failure failure) {121 Description description = failure.getDescription();122 Report info = new Report(description);123 info.setElapsedTime(0d);124 info.markAsIgnored();125 info.setMessage(failure.getMessage());126 executions.push(description, info);127 }128 /*129 * (non-Javadoc)130 * @see org.junit.runner.notification.RunListener#testStarted(org.junit.runner.Description)131 */132 @Override133 public void testStarted(Description description) throws Exception {134 startTime = System.currentTimeMillis();135 Report info = new Report(description);136 err = new ByteArrayOutputStream();137 out = new ByteArrayOutputStream();138 System.setErr(new PrintStream(err));139 System.setOut(new PrintStream(out));140 executions.push(description, info);141 if (root == null) {142 root = info;143 }144 }145 /*146 * (non-Javadoc)147 * @see org.junit.runner.notification.RunListener#testFinished(org.junit.runner.Description)148 */149 @Override150 public void testFinished(Description description) throws Exception {151 long endTime = System.currentTimeMillis();152 System.setErr(errBackup);153 System.setOut(outBackup);154 Report info = executions.peek(description);155 info.setElapsedTime((endTime - startTime) / 1000d);156 }157 /*158 * (non-Javadoc)159 * @see org.junit.runner.notification.RunListener#testRunStarted(org.junit.runner.Description)160 */161 @Override162 public void testRunStarted(Description description) throws Exception {163 executions.clear();164 runCount = 0;165 totalTime = 0;166 root = new Report(description.getChildren().get(0));167 executions.push(root.getDescription(), root);168 }169 /*170 * (non-Javadoc)171 * @see org.junit.runner.notification.RunListener#testRunFinished(org.junit.runner.Result)172 */173 @Override174 public void testRunFinished(Result result) throws Exception {175 totalTime = result.getRunTime();176 runCount = result.getRunCount() + result.getIgnoreCount();177 }178 private static String toString(ByteArrayOutputStream out) {179 try {180 return out.toString(UTF_8);181 } catch (UnsupportedEncodingException e) {182 return out.toString();183 }184 }185 /**186 * Returns if the given failure is due {@link AssertionError} or not.187 *188 * @param failure189 * as test result190 * @return {@code true} if the failure is generated by a failed assertion,191 * {@code false} otherwise.192 */193 public static boolean isFailure(Failure failure) {194 return failure != null && failure.getException() instanceof AssertionError;195 }196 /**...
Source:MaxStarterTest.java
...208 Request filtered= Request.aClass(AllTests.class).filterWith(209 new Filter() {210 @Override211 public boolean shouldRun(Description description) {212 return !description.toString().contains("Max");213 }214215 @Override216 public String describe() {217 return "Avoid infinite recursion";218 }219 });220 int maxCount= fMax.run(filtered, core).getRunCount();221 int coreCount= core.run(filtered).getRunCount();222 assertEquals(coreCount, maxCount);223 }224225 @Test226 public void testCountsStandUpToFiltration() {227 assertFilterLeavesTestUnscathed(AllTests.class);228 }229230 private void assertFilterLeavesTestUnscathed(Class<?> testClass) {231 Request oneClass= Request.aClass(testClass);232 Request filtered= oneClass.filterWith(new Filter() {233 @Override234 public boolean shouldRun(Description description) {235 return true;236 }237238 @Override239 public String describe() {240 return "Everything";241 }242 });243244 int filterCount= filtered.getRunner().testCount();245 int coreCount= oneClass.getRunner().testCount();246 assertEquals("Counts match up in " + testClass, coreCount, filterCount);247 }248249 private static class MalformedJUnit38Test {250 private MalformedJUnit38Test() {251 }252253 @SuppressWarnings("unused")254 public void testSucceeds() {255 }256 }257258 @Test259 public void maxShouldSkipMalformedJUnit38Classes() {260 Request request= Request.aClass(MalformedJUnit38Test.class);261 fMax.run(request);262 }263264 public static class MalformedJUnit38TestMethod extends TestCase {265 @SuppressWarnings("unused")266 private void testNothing() {267 }268 }269270 String fMessage= null;271272 @Test273 public void correctErrorFromMalformedTest() {274 Request request= Request.aClass(MalformedJUnit38TestMethod.class);275 JUnitCore core= new JUnitCore();276 Request sorted= fMax.sortRequest(request);277 Runner runner= sorted.getRunner();278 Result result= core.run(runner);279 Failure failure= result.getFailures().get(0);280 assertThat(failure.toString(), containsString("MalformedJUnit38TestMethod"));281 assertThat(failure.toString(), containsString("testNothing"));282 assertThat(failure.toString(), containsString("isn't public"));283 }284285 public static class HalfMalformedJUnit38TestMethod extends TestCase {286 public void testSomething() {287 }288289 @SuppressWarnings("unused")290 private void testNothing() {291 }292 }293294 @Test295 public void halfMalformed() {296 assertThat(JUnitCore.runClasses(HalfMalformedJUnit38TestMethod.class)297 .getFailureCount(), is(1));298 }299 300301 @Test302 public void correctErrorFromHalfMalformedTest() {303 Request request= Request.aClass(HalfMalformedJUnit38TestMethod.class);304 JUnitCore core= new JUnitCore();305 Request sorted= fMax.sortRequest(request);306 Runner runner= sorted.getRunner();307 Result result= core.run(runner);308 Failure failure= result.getFailures().get(0);309 assertThat(failure.toString(), containsString("MalformedJUnit38TestMethod"));310 assertThat(failure.toString(), containsString("testNothing"));311 assertThat(failure.toString(), containsString("isn't public"));312 }313}
...
Source:HttpReportRunner.java
...70 RequestEntity re = eem.getRequestEntity();71 if (re != null)72 {73 re.writeRequest(bos);74 sb.append("\nWith body:").append(bos.toString());75 }76 }77 catch (IOException e)78 {79 throw new RuntimeException("Failed to write out the last http method request body");80 }81 }82 return sb.toString();83 }84 /** ----------------------------------------------------85 * PURE DELEGATE METHODS86 * ----------------------------------------------------87 */88 /**89 * @param listener90 * @see org.junit.runner.notification.RunNotifier#addFirstListener(org.junit.runner.notification.RunListener)91 */92 public void addFirstListener(RunListener listener)93 {94 delegate.addFirstListener(listener);95 }96 /**97 * @param listener98 * @see org.junit.runner.notification.RunNotifier#addListener(org.junit.runner.notification.RunListener)99 */100 public void addListener(RunListener listener)101 {102 delegate.addListener(listener);103 }104 /**105 * @param obj106 * @return107 * @see java.lang.Object#equals(java.lang.Object)108 */109 public boolean equals(Object obj)110 {111 return delegate.equals(obj);112 }113 /**114 * @param failure115 * @see org.junit.runner.notification.RunNotifier#fireTestAssumptionFailed(org.junit.runner.notification.Failure)116 */117 public void fireTestAssumptionFailed(Failure failure)118 {119 delegate.fireTestAssumptionFailed(failure);120 }121 /**122 * @param description123 * @see org.junit.runner.notification.RunNotifier#fireTestFinished(org.junit.runner.Description)124 */125 public void fireTestFinished(Description description)126 {127 HttpReportRunner.lastMethod = null;128 HttpReportRunner.lastURL = null;129 delegate.fireTestFinished(description);130 }131 /**132 * @param description133 * @see org.junit.runner.notification.RunNotifier#fireTestIgnored(org.junit.runner.Description)134 */135 public void fireTestIgnored(Description description)136 {137 delegate.fireTestIgnored(description);138 }139 /**140 * @param result141 * @see org.junit.runner.notification.RunNotifier#fireTestRunFinished(org.junit.runner.Result)142 */143 public void fireTestRunFinished(Result result)144 {145 delegate.fireTestRunFinished(result);146 }147 /**148 * @param description149 * @see org.junit.runner.notification.RunNotifier#fireTestRunStarted(org.junit.runner.Description)150 */151 public void fireTestRunStarted(Description description)152 {153 delegate.fireTestRunStarted(description);154 }155 /**156 * @param description157 * @throws StoppedByUserException158 * @see org.junit.runner.notification.RunNotifier#fireTestStarted(org.junit.runner.Description)159 */160 public void fireTestStarted(Description description) throws StoppedByUserException161 {162 delegate.fireTestStarted(description);163 }164 /**165 * @return166 * @see java.lang.Object#hashCode()167 */168 public int hashCode()169 {170 return delegate.hashCode();171 }172 /**173 *174 * @see org.junit.runner.notification.RunNotifier#pleaseStop()175 */176 public void pleaseStop()177 {178 delegate.pleaseStop();179 }180 /**181 * @param listener182 * @see org.junit.runner.notification.RunNotifier#removeListener(org.junit.runner.notification.RunListener)183 */184 public void removeListener(RunListener listener)185 {186 delegate.removeListener(listener);187 }188 /**189 * @return190 * @see java.lang.Object#toString()191 */192 public String toString()193 {194 return delegate.toString();195 }196 }197}...
Source:SynchronizedRunListener.java
...64 return false;65 }66 return this.listener.equals(((SynchronizedRunListener) other).listener);67 }68 public String toString() {69 return this.listener.toString() + " (with synchronization wrapper)";70 }71}...
Source:JUnit4TestAdapter.java
...56 private boolean isIgnored(Description description) {57 return description.getAnnotation(Ignore.class) != null;58 }59 @Override60 public String toString() {61 return fNewTestClass.getName();62 }63 public void filter(Filter filter) throws NoTestsRemainException {64 filter.apply(fRunner);65 }66 public void sort(Sorter sorter) {67 sorter.apply(fRunner);68 }69}...
Source:Failure.java
...44 public Throwable getException() {45 return fThrownException;46 }47 @Override48 public String toString() {49 StringBuffer buffer = new StringBuffer();50 buffer.append(getTestHeader() + ": " + fThrownException.getMessage());51 return buffer.toString();52 }53 /**54 * Convenience method55 *56 * @return the printed form of the exception57 */58 public String getTrace() {59 StringWriter stringWriter = new StringWriter();60 PrintWriter writer = new PrintWriter(stringWriter);61 getException().printStackTrace(writer);62 StringBuffer buffer = stringWriter.getBuffer();63 return buffer.toString();64 }65 /**66 * Convenience method67 *68 * @return the message of the thrown exception69 */70 public String getMessage() {71 return getException().getMessage();72 }73}...
Source:LoggingRunListener.java
...9 + "] " + msg);10 }11 @Override12 public void testStarted(Description desc) throws Exception {13 log("testStarted(\"" + desc.toString() + "\")");14 }15 @Override16 public void testRunStarted(Description desc) throws Exception {17 log("testRunStarted(\"" + desc.toString() + "\")");18 }19 @Override20 public void testFailure(Failure f) throws Exception {21 log("testFailure(" + f.getMessage() + ", "22 + f.getDescription() + ")");23 }24 @Override25 public void testFinished(Description desc) throws Exception {26 log("testFinished(\"" + desc.toString() + "\")");27 }28 @Override29 public void testRunFinished(Result result) throws Exception {30 log("testRunFinished(successful=" + result.wasSuccessful()31 + ")");32 }33 @Override34 public void testIgnored(Description desc) throws Exception {35 log("testIgnored(\"" + desc.toString() + "\")");36 }37}...
toString
Using AI Code Generation
1Description description = Description.createSuiteDescription("TestSuite");2Description test1 = Description.createTestDescription("TestSuite", "test1");3Description test2 = Description.createTestDescription("TestSuite", "test2");4description.addChild(test1);5description.addChild(test2);6System.out.println(description.toString());7Result result = JUnitCore.runClasses(TestSuite.class);8System.out.println(result.toString());9RunListener listener = new RunListener() {10 public void testRunStarted(Description description) throws Exception {11 System.out.println(description.toString());12 super.testRunStarted(description);13 }14};15JUnitCore core = new JUnitCore();16core.addListener(listener);17core.run(TestSuite.class);18Filter filter = Filter.matchMethodDescription(Description.createTestDescription("TestSuite", "test1"));19System.out.println(filter.toString());20Sorter sorter = Sorter.random();21System.out.println(sorter.toString());22NoTestsRemainException exception = new NoTestsRemainException();23System.out.println(exception.toString());24Filterable filterable = new Filterable() {25 public void filter(Filter filter) throws NoTestsRemainException {26 System.out.println(filter.toString());27 }28};29filterable.filter(Filter.matchMethodDescription(Description.createTestDescription("TestSuite", "test1")));30Sortable sortable = new Sortable() {31 public void sort(Sorter sorter) {
toString
Using AI Code Generation
1package com.logicbig.example;2import org.junit.runner.Description;3import org.junit.runner.notification.Failure;4import org.junit.runner.notification.RunListener;5public class MyRunListener extends RunListener {6 public void testRunStarted(Description description) throws Exception {7 System.out.println("tests started, total count: " + description.testCount());8 }9 public void testRunFinished(org.junit.runner.Result result) throws Exception {10 System.out.println("tests finished, total count: " + result.getRunCount());11 }12 public void testStarted(Description description) throws Exception {13 System.out.println("test started: " + description);14 }15 public void testFinished(Description description) throws Exception {16 System.out.println("test finished: " + description);17 }18 public void testFailure(Failure failure) throws Exception {19 System.out.println("test failed: " + failure.getDescription());20 }21 public void testAssumptionFailure(Failure failure) {22 System.out.println("test assumption failed: " + failure.getDescription());23 }24 public void testIgnored(Description description) throws Exception {25 System.out.println("test ignored: " + description);26 }27}28testPlanExecutionStarted(TestPlan testPlan)29testPlanExecutionFinished(TestPlan testPlan)30The testPlanExecutionStarted() method is called before the tests are run. The testPlanExecutionFinished() method is called after the tests are run. The TestPlan object contains all the tests that will be run. The TestPlan object is
toString
Using AI Code Generation
1package org.junit.runner;2public class Description {3 public static void main(String args[]) {4 Description description = Description.createSuiteDescription("Test Suite");5 System.out.println(description.toString());6 }7}
toString
Using AI Code Generation
1import org.junit.runner.Description;2import org.junit.runner.Result;3import org.junit.runner.notification.Failure;4import org.junit.runner.notification.RunListener;5public class JUnitResultListener extends RunListener {6 private static String testName = null;7 public void testStarted(Description description) throws Exception {8 testName = description.getMethodName();9 }10 public void testFinished(Description description) throws Exception {11 testName = null;12 }13 public void testFailure(Failure failure) throws Exception {14 System.out.println("Test " + testName + " failed: " + failure.getMessage());15 }16 public void testIgnored(Description description) throws Exception {17 System.out.println("Test " + testName + " ignored");18 }19 public void testRunFinished(Result result) throws Exception {20 System.out.println("Test run finished");21 }22 public void testRunStarted(Description description) throws Exception {23 System.out.println("Test run started");24 }25}26@RunWith(JUnit4.class)27public class TestRunner {28 public void testMethod1() {29 System.out.println("Test method 1");30 }31 public void testMethod2() {32 System.out.println("Test method 2");33 }34 public void testMethod3() {35 System.out.println("Test method 3");36 }37 public void testMethod4() {38 System.out.println("Test method 4");39 }40 public static void main(String args[]) {41 JUnitCore core = new JUnitCore();42 core.addListener(new JUnitResultListener());43 core.run(TestRunner.class);44 }45}
toString
Using AI Code Generation
1Description description = Description.createTestDescription("com.example.Foo", "bar");2String descriptionString = description.toString();3System.out.println(descriptionString);4createSuiteDescription(String displayName, Annotation... annotations)5createSuiteDescription(String displayName, Iterable<Annotation> annotations)6createSuiteDescription(String displayName, Annotation[] annotations)7createSuiteDescription(String displayName, Annotation[] annotations, Iterable<Description> children)8createSuiteDescription(String displayName, Annotation[] annotations, Description... children)9createSuiteDescription(String displayName, Iterable<Annotation> annotations, Iterable<Description> children)10createSuiteDescription(String displayName, Iterable<Annotation> annotations, Description... children)11createSuiteDescription(String displayName, Description... children)12createSuiteDescription(String displayName, Iterable<Description> children)13createTestDescription(Class<?> testClass, String methodName, Annotation... annotations)14createTestDescription(Class<?> testClass, String methodName, Iterable<Annotation> annotations)15createTestDescription(Class<?> testClass, String methodName, Annotation[] annotations)16createTestDescription(String className, String methodName, Annotation... annotations)17createTestDescription(String className, String methodName, Iterable<Annotation> annotations)18createTestDescription(String className, String methodName, Annotation[] annotations)
LambdaTest also has a detailed JUnit tutorial explaining its features, importance, advanced use cases, best practices, and more to help you get started with running your automation testing scripts.
Here are the detailed JUnit testing chapters to help you get started:
You can also check out our JUnit certification if you wish to take your career in Selenium automation testing with JUnit to the next level.
Get 100 minutes of automation test minutes FREE!!