Awaitility is a small Java DSL for synchronizing asynchronous operations

Overview

Awaitility

Build Status Maven Central Javadoc

Testing asynchronous systems is hard. Not only does it require handling threads, timeouts and concurrency issues, but the intent of the test code can be obscured by all these details. Awaitility is a DSL that allows you to express expectations of an asynchronous system in a concise and easy to read manner. For example:

@Test
public void updatesCustomerStatus() {
    // Publish an asynchronous message to a broker (e.g. RabbitMQ):
    messageBroker.publishMessage(updateCustomerStatusMessage);
    // Awaitility lets you wait until the asynchronous operation completes:
    await().atMost(5, SECONDS).until(customerStatusIsUpdated());
    ...
}

News

  • 2020-05-19: Awaitility 4.0.3 is released. This release includes updates to ConditionEvaluationLogger as well as several depdency updates. If you're using the Groovy DSL beaware that Groovy has been upgraded from 2.x to 3.x. See changelog for details.
  • 2020-01-03: Awaitility 4.0.2 is released. This release includes support for asserting that a condition is maintained for specific duration, improvments to ConditionEvaluationListener as well as several bug fixes and other improvements. See changelog for details.
  • 2019-09-06: Awaitility 4.0.1 is released and it fixes a regression issue in which the condition evaluation duration could be evaluated to a negative number of nanoseconds on Windows. It also drops the dependency to objenesis since it's no longer used after moving to Java 8. See changelog for details.

Older news

Documentation

Links

Buy Me A Coffee

Comments
  • until with Runnable version that allows throwing exception

    until with Runnable version that allows throwing exception

    Consider providing until version that accepts lambda expression that is able to throw:

    Awaitility.await().atMost(...).until(() -> {
    ...
    callThatThrowsException();
    ...
    })
    

    Right now this looks like:

    Awaitility.await().atMost(...).until(() -> {
    ...
    try {
        callThatThrowsException();
    } catch(Exception e) {
        throw new RuntimeException(e);
    }
    ...
    })
    

    I can provide an implementation if you are ok with until() accepting something like ThrowableRunnable.

    opened by tkowalcz 26
  • dontCatchUncaughtExceptions by default

    dontCatchUncaughtExceptions by default

    What do you think about making the dontCatchUncaughtExceptions a setting by default?

    I think, sometimes catchs of uncaught exceptions lead to unexpected behaviour in tests,

    for example:

    @Test
    public void testFailed() throws InterruptedException {
        ThreadPoolTaskExecutor taskExecutor = setUpExecutor();
        taskExecutor.execute(new ErrorTestTask());
        ListenableFuture<?> future = taskExecutor.submitListenable(new ErrorTestTask());
        Awaitility.await()
                  .atMost(1, TimeUnit.SECONDS)
                  .pollInterval(10, TimeUnit.MILLISECONDS)
                  .until(future::isDone);
    }
    
    @Test
    public void testSuccess() throws InterruptedException {
        ThreadPoolTaskExecutor taskExecutor = setUpExecutor();
        taskExecutor.execute(new ErrorTestTask());
        ListenableFuture<?> future = taskExecutor.submitListenable(new ErrorTestTask());
        Thread.sleep(1000);
         Assertions.assertThat(future.isDone()).isTrue();
    }
    
    private ThreadPoolTaskExecutor setUpExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setThreadNamePrefix(THREAD_NAME_PREFIX);
        executor.setMaxPoolSize(1);
        executor.afterPropertiesSet();
        return executor;
    }
    
    private static class ErrorTestTask implements Runnable {
        @Override
        public void run() {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            throw new RuntimeException(Thread.currentThread().getName() + " -> Error");
        }
    }
    

    When I replaced Thread.sleep on the Awaitility, I got a failed test.

    I encountered this problem when I refactored a lot of tests to use the Awaitility instead of the Thread.sleep. It took quite a long time to understand that the problem was in another thread.

    opened by antkorwin 14
  • Regression in Groovy: ClassCastException for closures not returning Boolean

    Regression in Groovy: ClassCastException for closures not returning Boolean

    Code:

    Awaitility.await().until({ "something" })
    

    1.7.0: passes 2.0.0: fails with

    java.lang.String cannot be cast to java.lang.Boolean
    java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
    	at org.awaitility.core.CallableCondition$ConditionEvaluationWrapper.eval(CallableCondition.java:100)
    	at org.awaitility.core.ConditionAwaiter$ConditionPoller.run(ConditionAwaiter.java:215)
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    	at java.lang.Thread.run(Thread.java:745)
    

    AwaitilityGroovyBridge used runnable as Callable<Boolean> while AwaitilityExtensionModule uses runnable as Callable.

    Implementing AwaitilityTrait does not help, it seems that the extension module takes precedence. You need to change the closure to { "something" != null }.

    Release Notes don't mention any breaking changes, so I consider this as a regression.

    Also, please update examples from https://github.com/awaitility/awaitility/wiki/Groovy - they use deprecated classes.

    opened by pkubowicz 12
  • Make ConditionAwaiter#executor configurable

    Make ConditionAwaiter#executor configurable

    In my current project we use a library that heavily depends on thread local variables. We have our own ExecutorService implementation that manages propagation of thread local variables between threads when needed.

    When code is executed within await().until() blocks this thread local magic breaks because Awaitility uses its own ExecutorService. It would be nice to allow client code to set custom ExecutorService to enable this type of scenarios.

    opened by dmitriy-yefremov 12
  • Awaitility hiding exceptions on the same thread

    Awaitility hiding exceptions on the same thread

    This is a small program that demonstrates the behavior I'm seeing that appears to be a bug.

    Actual behavior: When this runs it exits and prints IllegalArgumentException stack trace like a normal java program. The weird behavior is if you comment out the line .dontCatchUncaughtExceptions(), it will exit with status code 1 and not print the exception.

    Expected behavior: I would expect awaitility to not affect exceptions thrown in the same thread and outside its until() {} block.

    Version: org.awaitility awaitility 3.1.2

    public static void main(final String... args) throws Exception {
            final AtomicInteger count = new AtomicInteger(0);
            await()
                    .dontCatchUncaughtExceptions()
                    .ignoreExceptionsMatching(instanceOf(IOException.class))
                    .atMost(3, TimeUnit.MINUTES)
                    .until(() -> {
                        count.incrementAndGet();
                        return count.get() > 3;
                    });
    
            if (true) {
                System.out.println("throwing an exception");
                throw new IllegalArgumentException("broken");
            }
            System.out.println("Already exited so you won't see this");
    }
    
    opened by pelletier2017 10
  • Add Kotlin support

    Add Kotlin support

    Awaitility already works fine with Kotlin, but there are a few instances where you can't inline calls to until.

    It would also be nice to be able to use Kotlin idioms such as:

    Awaitility.await().until {
        x > y
    }
    
    opened by iggymoran 10
  • Add the ability to await for event happening more than once

    Add the ability to await for event happening more than once

    It would be nice to have a built-in feature that will allow awaiting for some event happening more than once. For example, I'm sending three messages to the queue and expecting that they all three will be received at some point in time.

    for (Message message : messages) {
        sendMessageToTheQueue(message);
    }
    
    List<Message> messages = await().until(receiveMessage(), hasMyId(), times(3));
    
    ...
    Callable<Message> receiveMessage();
    Matcher<Message> hasMyId();
    
    opened by SimY4 10
  • Support user-provided retry (polling) policy

    Support user-provided retry (polling) policy

    Awaitility is almost ideal for our purposes with one exception: we'd like to back off exponentially (or perhaps with a Fibonacci sequence) in our polling rather than use a fixed interval.

    I may have missed it, but I didn't see a way in the docs or code to provide my own retry policy.

    opened by binkley 10
  • Feature/ignoreable exceptions

    Feature/ignoreable exceptions

    This adds option ignoreExceptions, which treats Exceptions that occur during condition evaluation as non-fatal, evaluating to false. This helped us cover a use case where we did RestAssured statements, which threw exceptions during the period asserts on the path failed, before settling into boolean values.

    opened by tkrueger 10
  • Unpredictable behavior around `during` and `atMost` of Awaitility

    Unpredictable behavior around `during` and `atMost` of Awaitility

    While I was testing Kafka I end up with some issues around Awaitility. The goal was to test that Kafka topic doesn't contain the new records for a specified time. This is the simplified scratch of my test but it shows the problem. I expect that ConditionTimeoutException doesn't throw in this case. But it does.

    public static void main(String[] args) {
            List<String> list = new ArrayList<>();
            await("wait").during(5_000, TimeUnit.MILLISECONDS).atMost(5_000, TimeUnit.MILLISECONDS)
                    .pollInterval(100, TimeUnit.MILLISECONDS)
                    .until(() -> list, List::isEmpty);
    }
    

    I increased the atMost timeout to 5000 + pollInterval -> 5100 but still end up with an exception. On my local machine throwing exception was stoped closed the value of atMost timeout of 5170-5180. Should I keep something in mind? Or may the test isn't correct?

    opened by uraniumdawn 9
  • Ignore Exceptions, but log them

    Ignore Exceptions, but log them

    I have a few situations where I don't want certain exceptions to interrupt my wait, but for debugging purposes it's quite valuable to have the information that this exception occured. Therefore it would be nice to be able to register a ExceptionListener (or extend the ConditionEvaluationListener) to handle those exceptions.

    opened by TheNitek 9
  • Bump actions/checkout from 2 to 3.1.0

    Bump actions/checkout from 2 to 3.1.0

    Bumps actions/checkout from 2 to 3.1.0.

    Release notes

    Sourced from actions/checkout's releases.

    v3.1.0

    What's Changed

    New Contributors

    Full Changelog: https://github.com/actions/checkout/compare/v3.0.2...v3.1.0

    v3.0.2

    What's Changed

    Full Changelog: https://github.com/actions/checkout/compare/v3...v3.0.2

    v3.0.1

    v3.0.0

    • Updated to the node16 runtime by default
      • This requires a minimum Actions Runner version of v2.285.0 to run, which is by default available in GHES 3.4 or later.

    v2.4.2

    What's Changed

    Full Changelog: https://github.com/actions/checkout/compare/v2...v2.4.2

    v2.4.1

    • Fixed an issue where checkout failed to run in container jobs due to the new git setting safe.directory

    v2.4.0

    • Convert SSH URLs like org-<ORG_ID>@github.com: to https://github.com/ - pr

    v2.3.5

    Update dependencies

    v2.3.4

    v2.3.3

    ... (truncated)

    Changelog

    Sourced from actions/checkout's changelog.

    v3.1.0

    v3.0.2

    v3.0.1

    v3.0.0

    v2.3.1

    v2.3.0

    v2.2.0

    v2.1.1

    • Changes to support GHES (here and here)

    v2.1.0

    v2.0.0

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 0
  • Bump actions/setup-java from 2 to 3.5.1

    Bump actions/setup-java from 2 to 3.5.1

    Bumps actions/setup-java from 2 to 3.5.1.

    Release notes

    Sourced from actions/setup-java's releases.

    v3.5.1

    In scope of this release we change logic for Microsoft Build of OpenJDK. Previously it had hard coded versions. In this release versions were moved to the separate json file. When a new version of Java is released, it can be added to this file and be used without releasing new version of the action.

    v3.5.0

    Add support for multiple jdks

    In scope of this release we add support for multiple jdks. Customers can specify multiple versions of java through java-version input.

        steps:
          - uses: actions/setup-java@v3
            with:
              distribution: '<distribution>'
              java-version: |
                8
                11
                15
    

    Besides, we added such changes as:

    v3.4.1

    In scope of this release we updated actions/cache package as the new version contains fixes for caching error handling.

    v3.4.0

    In scope of this release we introduce such changes as:

    v3.3.0

    In scope of this pull request we add support for Amazon Corretto Build of OpenJDK (actions/setup-java#312).

    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Setup-java
        uses: actions/setup-java@v3
        with:
          distribution: corretto
          java-version: 11
    

    Supported distributions

    Currently, the following distributions are supported:

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 0
  • More flexible way to enable logging

    More flexible way to enable logging

    Hey there!

    I'd like to add more flexible and simple way to add global logging for all conditions and logging for single condition.

    Global Awaitility settings

    from

    Awaitility.setDefaultConditionEvaluationListener(new ConditionEvaluationLogger(log::info()));
    

    To

    Awaitility.setLogging(log::info);
    

    or for the System.out

    Awaitility.setDefaultLogging();
    

    Single Condition settings

    from

    await()
        .with()
        .conditionEvaluationListener(new ConditionEvaluationLogger(log::info))
        .pollInterval(ONE_HUNDRED_MILLISECONDS)
        .until(logs::size, is(4));
    

    to

    await()
        .with()
        .logging(log::info)
        .pollInterval(ONE_HUNDRED_MILLISECONDS)
        .until(logs::size, is(4));
    

    or for the System.out

    await()
        .with()
        .logging()
        .pollInterval(ONE_HUNDRED_MILLISECONDS)
        .until(logs::size, is(4));
    

    TODO

    • [x] global Awaitility settings
    • [x] single Condition settings
    • [x] unit tests
    • [x] java docs
    • [ ] user docs
    opened by a-simeshin 1
  • Bump maven-jar-plugin from 2.4 to 3.3.0

    Bump maven-jar-plugin from 2.4 to 3.3.0

    Bumps maven-jar-plugin from 2.4 to 3.3.0.

    Release notes

    Sourced from maven-jar-plugin's releases.

    3.3.0

    🚀 New features and improvements

    🐛 Bug Fixes

    📦 Dependency updates

    📝 Documentation updates

    • Restore mavenArchiverVersion property used in the site (#51) @​jorsol
    • (doc) Updated create-test-jar.apt.vm removing 'and' in Maven site Create Test JAR documentation (#34) @​focbenz

    👻 Maintenance

    3.2.2

    What's Changed

    New Contributors

    ... (truncated)

    Commits
    • d68df4b [maven-release-plugin] prepare release maven-jar-plugin-3.3.0
    • fb2299a Restore mavenArchiverVersion property used in the site
    • 1204127 [MJAR-290] - Update Plexus Utils to 3.4.2
    • 5fd2fc9 [MJAR-291] - Upgrade Parent to 37
    • 56344da use shared action v3 (#49)
    • 4148491 Code simplifications in AbstractMojo (#47)
    • 46c017d [MJAR-275] - Fix outputTimestamp not applied to module-info; breaks reproduci...
    • c02be20 [MJAR-278] Update plugin (requires Maven 3.2.5+) (#19)
    • b6fe3eb Bump junit from 4.11 to 4.13.2 in /src/it/MJAR-228
    • 78a28dd Ignore Maven Core updates
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
  • Assert that a method indeed blocks for a while

    Assert that a method indeed blocks for a while

    Maybe an esoteric requirement, but I couldn't find an existing nice way anywhere (in or outside Awaitility) to do this. I need to assert in my tests that indeed a method blocks for at least some amount of time.

    I imagine an api something like this:

    await().atLeast(5 seconds).threadBlocks(() -> somethingThatBlocksForAWhile());
    

    My implementation looks like this:

    public class BlockedThreadAsserter {
    
        AtomicBoolean methodReturned = new AtomicBoolean(false);
    
        public boolean functionHasCompleted() {
            return methodReturned.get();
        }
    
        public void assertFunctionBlocks(Runnable functionExpectedToBlock, final Duration blockedForAtLeast) {
            Thread blocked = new Thread(() -> {
                try {
                    functionExpectedToBlock.run();
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
                methodReturned.set(true);
            });
            blocked.start();
    
            await()
                    .pollDelay(blockedForAtLeast) // makes sure it is still blocked after 1 second
                    .atMost(blockedForAtLeast.plus(Duration.ofSeconds(1)))
                    .untilAsserted(
                            () -> Truth.assertWithMessage("Thread should be sleeping/blocked and not have returned")
                                    .that(methodReturned.get())
                                    .isFalse());
        }
    
        // method: assert function doesn't block
    
        // method: assert function unblocks only after 2 seconds - useful for when we can't use a separate thread to check due to locking semantics
        public void assertUnblocksAfter(final Runnable functionExpectedToBlock,
                                        final Duration unblocksAfter) {
            throw new NotImplementedException();
        }
    }
    

    usage

    var commitBlocks = new BlockedThreadAsserter();
    commitBlocks.assertFunctionBlocks(pc::commitOffsetsThatAreReady, ofSeconds(2));
    
    <snip>
    
    //
    await().untilAsserted(() -> Truth.assertWithMessage("commit should now have unlocked and returned")
            .that(commitBlocks.functionHasCompleted())
            .isTrue());
    
    opened by astubbs 0
  • Bump maven-help-plugin from 2.2 to 3.3.0

    Bump maven-help-plugin from 2.2 to 3.3.0

    Bumps maven-help-plugin from 2.2 to 3.3.0.

    Commits
    • 5a4f81d [maven-release-plugin] prepare release maven-help-plugin-3.3.0
    • e598bde [MPH-162] Allow all mojos to be configured to produce repeatable output
    • 11e3270 [MPH-190] Upgrade Maven Reporting API to 3.1.1
    • dd6101b Bump plexus-utils from 3.3.0 to 3.4.2
    • 17687e3 [MPH-188] - Cleanup - Pom
    • 00d97df Bump asm-commons from 9.2 to 9.3
    • 0161b1c Bump asm from 9.2 to 9.3
    • 3974cd1 [MPH-187] - Upgrade to JDK minimum
    • 67e1272 [MPH-186] - maven-parent to 37
    • d074694 Bump mrm-maven-plugin from 1.4.0 to 1.4.1
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
Owner
Awaitility
Java DSL for synchronizing asynchronous operations
Awaitility
Java DSL for easy testing of REST services

Testing and validation of REST services in Java is harder than in dynamic languages such as Ruby and Groovy. REST Assured brings the simplicity of usi

REST Assured 6.2k Dec 31, 2022
Java DSL for easy testing of REST services

Testing and validation of REST services in Java is harder than in dynamic languages such as Ruby and Groovy. REST Assured brings the simplicity of usi

REST Assured 6.2k Dec 25, 2022
Cucumber DSL for testing RESTful Web Services

cukes-rest takes simplicity of Cucumber and provides bindings for HTTP specification. As a sugar on top, cukes-rest adds steps for storing and using r

C.T.Co 100 Oct 18, 2022
JVM version of Pact. Enables consumer driven contract testing, providing a mock service and DSL for the consumer project, and interaction playback and verification for the service provider project.

pact-jvm JVM implementation of the consumer driven contract library pact. From the Ruby Pact website: Define a pact between service consumers and prov

Pact Foundation 962 Dec 31, 2022
Toolkit for testing multi-threaded and asynchronous applications

ConcurrentUnit A simple, zero-dependency toolkit for testing multi-threaded code. Supports Java 1.6+. Introduction ConcurrentUnit was created to help

Jonathan Halterman 406 Dec 30, 2022
A small Private Messaging Minecraft Plugin

Project PM is a Private Messaging system Mini-Plugin Description ?? This is a test plugin, meaning I didn't really intend it for the public use, the "

ren 1 Sep 15, 2022
A Java architecture test library, to specify and assert architecture rules in plain Java

ArchUnit is a free, simple and extensible library for checking the architecture of your Java code. That is, ArchUnit can check dependencies between pa

TNG Technology Consulting GmbH 2.5k Jan 2, 2023
HATEOAS with HAL for Java. Create hypermedia APIs by easily serializing your Java models into HAL JSON.

hate HATEOAS with HAL for Java. Create hypermedia APIs by easily serializing your Java models into HAL JSON. More info in the wiki. Install with Maven

null 20 Oct 5, 2022
Never debug a test again: Detailed failure reports and hassle free assertions for Java tests - Power Asserts for Java

Scott Test Reporter for Maven and Gradle Get extremely detailed failure messages for your tests without assertion libraries, additional configuration

Dávid Csákvári 133 Nov 17, 2022
TCP Chat Application - Java networking, java swing

TCP-Chat-Application-in-Java TCP Chat Application - Java networking, java swing Java – Multithread Chat System Java Project on core Java, Java swing &

Muhammad Asad 5 Feb 4, 2022
A sample repo to help you handle basic auth for automation test in Java-selenium on LambdaTest. Run your Java Selenium tests on LambdaTest platform.

How to handle basic auth for automation test in Java-selenium on LambdaTest Prerequisites Install and set environment variable for java. Windows - htt

null 12 Jul 13, 2022
A sample repo to help you clear browser cache with Selenium 4 Java on LambdaTest cloud. Run your Java Selenium tests on LambdaTest platform.

How to clear browser cache with Selenium 4 Java on LambdaTest cloud Prerequisites Install and set environment variable for java. Windows - https://www

null 12 Jul 13, 2022
A sample repo to help you run automation test in incognito mode in Java-selenium on LambdaTest. Run your Java Selenium tests on LambdaTest platform.

How to run automation test in incognito mode in Java-selenium on LambdaTest Prerequisites Install and set environment variable for java. Windows - htt

null 12 Jul 13, 2022
A sample repo to help you handle cookies for automation test in Java-selenium on LambdaTest. Run your Java Selenium tests on LambdaTest platform.

How to handle cookies for automation test in Java-selenium on LambdaTest Prerequisites Install and set environment variable for java. Windows - https:

null 13 Jul 13, 2022
A sample repo to help you set geolocation for automation test in Java-selenium on LambdaTest. Run your Java Selenium tests on LambdaTest platform.

How to set geolocation for automation test in Java-selenium on LambdaTest Prerequisites Install and set environment variable for java. Windows - https

null 12 Jul 13, 2022
A sample repo to help you capture JavaScript exception for automation test in Java-selenium on LambdaTest. Run your Java Selenium tests on LambdaTest platform.

How to capture JavaScript exception for automation test in Java-selenium on LambdaTest Prerequisites Install and set environment variable for java. Wi

null 12 Jul 13, 2022
A sample repo to help you find an element by text for automation test in Java-selenium on LambdaTest. Run your Java Selenium tests on LambdaTest platform.

How to find an element by text for automation test in Java-selenium on LambdaTest Prerequisites Install and set environment variable for java. Windows

null 12 Jul 13, 2022
A sample repo to help you emulate network conditions in Java-selenium automation test on LambdaTest. Run your Java Selenium tests on LambdaTest platform.

How to emulate network conditions in Java-selenium automation test on LambdaTest Prerequisites Install and set environment variable for java. Windows

null 12 Jul 13, 2022