{"id":17280898,"url":"https://github.com/lefou/lambdatest","last_synced_at":"2026-03-12T08:02:26.755Z","repository":{"id":21395501,"uuid":"24713331","full_name":"lefou/LambdaTest","owner":"lefou","description":"LambdaTest - Lambda-enabled functional testing API on top of JUnit and TestNG","archived":false,"fork":false,"pushed_at":"2023-11-23T17:16:50.000Z","size":824,"stargazers_count":9,"open_issues_count":6,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-26T07:45:59.801Z","etag":null,"topics":["functional-programming","java","java5","java8","junit","junit5","specification","testing","testng"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lefou.png","metadata":{"files":{"readme":"README.adoc","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null},"funding":{"github":"lefou"}},"created_at":"2014-10-02T09:19:54.000Z","updated_at":"2023-09-08T16:51:02.000Z","dependencies_parsed_at":"2023-11-23T18:36:44.448Z","dependency_job_id":null,"html_url":"https://github.com/lefou/LambdaTest","commit_stats":null,"previous_names":["lefou/poor-mans-lambda-test"],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/lefou/LambdaTest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lefou%2FLambdaTest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lefou%2FLambdaTest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lefou%2FLambdaTest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lefou%2FLambdaTest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lefou","download_url":"https://codeload.github.com/lefou/LambdaTest/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lefou%2FLambdaTest/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30419276,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T07:30:13.030Z","status":"ssl_error","status_checked_at":"2026-03-12T07:29:54.885Z","response_time":114,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["functional-programming","java","java5","java8","junit","junit5","specification","testing","testng"],"created_at":"2024-10-15T09:22:20.680Z","updated_at":"2026-03-12T08:02:26.719Z","avatar_url":"https://github.com/lefou.png","language":"Java","funding_links":["https://github.com/sponsors/lefou"],"categories":[],"sub_categories":[],"readme":"= Lambda Test\n:toc:\n:toc-placement: preamble\n:lambdatestversion: 0.8.0\n:documentationversion: {lambdatestversion}\n:testngversion: 6.11\n:junitversion: 4.12\n:jupiterversion: 5.9.2\n:lambdatest: LambdaTest\nifndef::env-asciidoclet[:srcdir: src/main/java/]\nifdef::env-asciidoclet[:srcdir:]\nifndef::env-asciidoclet[:javasuffix: .java]\nifdef::env-asciidoclet[:javasuffix: .html]\n\nifdef::env-github[]\nimage:https://github.com/lefou/LambdaTest/workflows/.github/workflows/build.yml/badge.svg[\"Build Status\", link=\"https://github.com/lefou/LambdaTest/actions\"]\nimage:https://api.codacy.com/project/badge/Grade/e886bd7ca9784ecfb00fe8afb59b8909[\"Codacy code quality\", link=\"https://www.codacy.com/app/lefou/LambdaTest\"]\nimage:https://javadoc.io/badge2/de.tototec/de.tobiasroeser.lambdatest/javadoc.svg[\"JavaDoc\", link=\"https://javadoc.io/doc/de.tototec/de.tobiasroeser.lambdatest\"]\nimage:https://badges.gitter.im/lefou/LambdaTest.svg[\"Chat on Gitter\", link=\"https://gitter.im/lefou/LambdaTest\"]\nendif::[]\n\nifndef::env-github[Project Homepage: https://github.com/lefou/LambdaTest]\n\n\nLambda-enabled functional testing on top of JUnit and TestNG.\n\nUse the same DSL with any testing framework.\n\nDocumentation for LambdaTest {documentationversion}.\n\n\n== Motivation\n\nWhen constrained to work in a Java-only toolchain, I really miss http://scalatest.org[ScalaTest].\nI tried some lambda enabled test frameworks, but until now (2014), did not find a suitable solution without compromizing the integration benefits.\n\nThus, I decided to write a small and generic test library that allows writing of functional test without reinventing the wheel.\nLambdaTest works on top of JUnit and TestNG, all you need is to add it to the test classpath.\nNo further adaptions to your existing test setup are needed.\nYou will immediately gain the joy of Lambda-enabled functional testing, better assertion messages and nicely colored output.\n\n== Features\n\nMost important features are:\n\n* Write test via API (No longer required to have each test in a separate annotated method)\n* Meaningful names for tests\n* Nicely colored output per test case\n* Easy to write data-centric tests (e.g. generate as much test cases as you need programmatically, e.g. in a loop)\n* Easy to intercept exceptions with `intercept`\n* Useful assertion message and difference highlighting in `expectXXX`-methods\n* Opt-in to not fail fast when using `expectXXX`-methods (see more than the first assertion error)\n* Easy to mark pending tests\n* Contains useful tools to work with temporary files and directories\n* Easy way to create proxies as mock dependencies\n\n== Documentation\n\nBeside this document, you can also read the https://javadoc.io/doc/de.tototec/de.tototec.utils.functional[JavadDoc for LambdaTest]\n\n== Download from Maven Central\n\n{lambdatest} is available from http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22de.tototec%22%20AND%20a%3A%22de.tobiasroeser.lambdatest%22[Maven central repository].\n\nMaven users can use the following dependency declaration:\n\n[source,xml,subs=\"attributes,verbatim\"]\n----\n\u003cdependencies\u003e\n  \u003cdependency\u003e\n    \u003cgroupId\u003ede.tototec\u003c/groupId\u003e\n    \u003cartifactId\u003ede.tobiasroeser.lambdatest\u003c/artifactId\u003e\n    \u003cversion\u003e{lambdatestversion}\u003c/version\u003e\n    \u003cscope\u003etest\u003c/scope\u003e\n  \u003c/dependency\u003e\n  \u003c!-- If you use LambdaTest with JUnit --\u003e\n  \u003cdependency\u003e\n    \u003cgroupId\u003ejunit\u003c/groupId\u003e\n    \u003cartifactId\u003ejunit\u003c/artifactId\u003e\n    \u003cversion\u003e{junitversion}\u003c/version\u003e\n    \u003cscope\u003etest\u003c/scope\u003e\n  \u003c/dependency\u003e\n  \u003c!-- If you use LambdaTest with TestNG --\u003e\n  \u003cdependency\u003e\n    \u003cgroupId\u003eorg.testng\u003c/groupId\u003e\n    \u003cartifactId\u003etestng\u003c/artifactId\u003e\n    \u003cversion\u003e{testngversion}\u003c/version\u003e\n    \u003cscope\u003etest\u003c/scope\u003e\n  \u003c/dependency\u003e\n  \u003c!-- If you use LambdaTest with JUnit5 / Jupiter --\u003e\n  \u003cdependency\u003e\n    \u003cgroupId\u003eorg.junit.jupiter\u003c/groupId\u003e\n    \u003cartifactId\u003ejunit-jupiter\u003c/artifactId\u003e\n    \u003cversion\u003e{jupiterversion}\u003c/version\u003e\n    \u003cscope\u003etest\u003c/scope\u003e\n  \u003c/dependency\u003e\n\u003c/dependencies\u003e\n----\n\n== Choose your favorite Unit-Test Runner: TestNG, JUnit, Junit5 (Jupiter)\n\nWith {lambdatest}, you need to only know LambdaTests very simple and minimalistic API but can use it to write test for JUnit and TestNG.\n\nTo avoid a dependency to both frameworks at the same time, your test class  inherits a different base class, but besides that, everything else is the same.\n\nFor JUnit you inherit link:{srcdir}de/tobiasroeser/lambdatest/junit/FreeSpec{javasuffix}[`de.tobiasroeser.lambdatest.junit.FreeSpec`].\n\nFor Junit 5 (Jupiter) you inherit link:{srcdir}de/tobiasroeser/lambdatest/junit5/FreeSpec{javasuffix}[`de.tobiasroeser.lambdatest.junit5.FreeSpec`].\n\nFor TestNG you inherit\nlink:{srcdir}de/tobiasroeser/lambdatest/testng/FreeSpec{javasuffix}[`de.tobiasroeser.lambdatest.testng.FreeSpec`].\n\n\n[NOTE]\n--\nIf you use LambdaTest with `mill.testng.TestNGFramework` (in Mill or sbt), you may see extra verbose output.\nYou can disable the progress output of `mill.testng.TestNGFramework` by setting the `mill.testng.printProgress` property to `0`.\n\n.`build.sc`: Make `mill.testng.TestNGFramework` runner less verbose in Mill\n[source,scala,subs=\"attributes\"]\n----\nobject test extends TestModule.TestNg {\n  override def forkArgs = T{ super.forkArgs() ++ Seq(\"-Dmill.testng.printProgress=0\") }\n}\n----\n--\n\n== Writing tests with Lambda Test\n\nThe test cases can be defined in various places.\n\n* in the class constructor\n* in the `protected void initTests()` method\n* in a class instance initializer\n\nHere you see a basic test example, which produces a valid TestNG test class.\nYou need to extend from class `de.tobiasroeser.lambdatest.testng.FreeSpec`.\n\n[source,java]\n----\nimport static de.tobiasroeser.lambdatest.Expect.expectEquals;\n// You can also use JUnit or Junit 5 (Jupiter) based tests with\n// import de.tobiasroeser.lambdatest.junit.FreeSpec;\n// import de.tobiasroeser.lambdatest.junit5.FreeSpec;\nimport de.tobiasroeser.lambdatest.testng.FreeSpec;\n\npublic class SimpleTest extends FreeSpec {\n  public SimpleTest() {\n\n    test(\"1 + 1 = 2\", () -\u003e {\n      expectEquals(1 + 1, 2);\n    });\n\n    test(\"a pending test\", () -\u003e pending());\n\n    test(\"divide by zero\", () -\u003e {\n      int a = 2;\n      int b = 0;\n      intercept(ArithmeticException.class, () -\u003e {\n        int c = a / b;\n      });\n    });\n\n    section(\"A String should\", () -\u003e {\n      final String aString = \"A string\";\n\n      test(\"match certain criteria\", () -\u003e {\n        expectString(aString)\n          .contains(\"string\")\n          .containsIgnoreCase(\"String\")\n          .startsWith(\"A\")\n          .endsWith(\"ng\")\n          .hasLength(8);\n      });\n\n      test(\"be not longer than 2\", () -\u003e {\n        expectString(aString).isLongerThan(2);\n      });\n    });\n\n    test(\"demo of a fail\", () -\u003e {\n      \"yes\".equals(\"yes and no\");\n    });\n\n    {\n      test(\"test in initializer\", () -\u003e {\n\t    expectTrue(true);\n      });\n\t}\n  }\n\n  // You can also define test here, to avoid\n  // their initialization at class construction time\n  @Override protected void initTests() {\n  \ttest(\"should succeed (lazy init)\", () -\u003e {\n\t  expectTrue(true);\n  \t});\n  }\n}\n----\n\nThe methods `test`, `pending` and `intercept` are provided by `FreeSpec`\nwhereas the usual `expectXXX` methods are provided by `Expect`.\n\nThe output of this test suite above would look like this:\n\nimage:Screenshot_SimpleTest.jpg[]\n\n[NOTE]\n--\nYou can run the above test directly in the {lambdatest} project directory with:\n\n----\nmvn test -Dtest=SimpleTest\n----\n--\n\n\nYou should write your test cases so that they don't need to be executed in order.\n{lambdatest} is able to run tests in parallel, if you enable it explicitly with `FreeSpec.setRunInParallel(true)`.\n\nBy default `expectXXX`-methods fail fast, which means the first failing assertion will end the whole test.\nThis is also the behaviour you will get with most other test frameworks.\n\nBut you can disable fail-fast behaviour for assertions/expectations with `FreeSpec.setExpectFailFast(false)`.\nThen, the first failing `expectXXX`-error will not abort the test but the test is optimistically continued.\nFurther failing assertion errors are collected and the test fails at the end, reporting all collected errors.\n\n== Writing assertions with `Expect`\n\n{lambdatest} provides many methods in the class `de.tobiasroeser.lambdatest.Expect` to write assertion.\nYou can use these as an alternative to the assertion methods provides by other unit testing framework to gain the following advantages:\n\n* Nice output of differences between expected and actual values. Especially for string and various collection types\n* `expectXXX`-methods provide a feature to collect multiple assertions (non-fail-fast behaviour), such that you can collect as much errors as possible in one test run, instead of giving up at the first error.\n\n.Selected static methods of `Expect`\n* `expectNull` - Assert that a given value is null\n* `expectNotNull` - Assert that a given value is not null\n* `expectEquals` - Assert equality of two given objects or values.\n* `expectNotEquals` - Assert non-equality of two given objects or values.\n* `expectTrue` - Assert a value evaluates to `true`\n* `expectFalse` - Assert a value evaluates to `false`\n* `expectDouble` - Assert that a given double is non-null and return an instance of `ExpectDouble`  with provides further checks on the actual double in a fluent API\n* `expectString` - Assert that a given string is non-null and return an instance of `ExpectString` with provides further checks on the actual string in a fluent API\n* `expectCollection` - Assert that a given collection is non-null and return an instance of `ExpectCollection` with provides further checks on the actual colletion in a fluent API\n* `expectMap` - Assert that a given map is non-null and return an instance of `ExpectMap` with provides further checks on the actual map in a fluent API\n* `intercept` - Assert that a code block throws an Exception of the given type and optional with an message matching a given regular expression. Returns the thrown exception for further analysis\n\nThere are more method in `Expect` with setup and control it non-fail-fast handling via ThreadLocals. Those are only needed, if you want to use these behaviour outside of `FreeSpec`.\n\n[NOTE]\n--\nIf you want to use the non-fail-fast behaviour of the `Expect` class  outside of `FreeSpec`, you have to take care of setup and finalization by yourself.\n--\n\n== Fluent API to investigate common types\n\nAll fluet API `ExpectXXX` classes support the fail-late behaviour.\n\n=== Analyze Strings with `ExpectString`\n\nTo inspect and assert strings, use the class `ExpectString`, which is also returned, if you use `Expect.expectString`.\n\n.Methods of `ExpectString`\n* `isEqual`\n* `isNotEqual`\n* `isEqualIgnoreCase`\n* `isNotEqualIgnoreCase`\n* `startsWith`\n* `StartsWithNot`\n* `endsWith`\n* `endsNotWith`\n* `matches`\n* `matchesNot`\n* `hasLength`\n* `hasLengthNot`\n* `isLongerThan`\n* `isShorterThan`\n* `isTrimmed`\n* `contains`\n* `containsNot`\n* `containsIgnoreCase`\n* `containsIgnoreCaseNot`\n\n=== Analyze Collections with `ExpectCollection`\n\nTo inspect and assert collections, use the class `ExpectCollection`, which is also returned, if you use `Expect.expectCollection`.\n\n=== Analyze Maps with `ExpectMap`\n\nTo inspect and assert maps, use the class `ExpectMap`, which is also returned, if you use `Expect.expectMap`.\n\n=== Analyze Doubles with `ExpectDouble`\n\nTo inspect and assert doubles, use the class `ExpectMap`, which is also returned, if you use `Expect.expectDouble`.\n\n.Methods of ExpectDouble\n* `isCloseTo`\n* `isNotCloseTo`\n* `isBetween`\n* `isNotBetween`\n* `isNaN`\n* `isNotNaN`\n\n== Testing files and directories with `TempFile`\n\n{lambdatest} comes with a helper class `de.tobiasroeser.lambdatest.TempFile` which contains useful methods to work with temporary files.\n\nTo create a temporary file with a given content and do something with it, you can use `TempFile.withTempFile` or it procedural version with does not return a value `TempFile.withTempFileP`. After the method completes, the temporary file will automatically deleted.\n\nTo create and work with temporary files, you can use `TempFile.withTempDir` and TempFile.withTempDirP`. Those will be recursively deleted after completion.\n\nThere are more useful methods in class `TempFile`, e.g. `readFile`, `writeToFile` and `deleteRecursive`. Please inspect the class for more information.\n\n== Using `TestProxy` to create mock objects\n\nThe general idea in unit testing is to isolate a class under test from its dependencies.\n\nAn naive way to do this is to create dummy implementations, but this can be a very cumbersome, repetitive and booring task. Also it creates a lot of boilerplate code, which is also unnecessary hard to maintain.\n\nOn the opposite end, you can  find very advanced mocking frameworks which will create mocks that can be trained and replayed, but the resulting code is no longer easy to understand and also adds lots of new dependencies.\n\nTherefore in the middle there is `TestProxy` to easily create dummy proxy instances.\nBy default, each invoked method on the proxy will throw an `UnsupportedOperationException` with a meaningful detail message.\n\nYou can also provide explicit behaviour to your proxy by providing delegate objects.\nWhenever a method is invoked on the proxy, the given objects will be checked if they contain a method with a matching signature, and if so, that method will be invoked an behalf of the proxy.\n\nYou can either use the more explicit way with `TestProxy.proxy(ClassLoader, List\u003cClass\u003c?\u003e\u003e, List\u003cObject\u003e)` or the more convenient and compact `TestProxy.proxy(Object...)` method.\n\n// TODO: example\n.Example Test using `TestProxy`\n[source,java]\n----\npackage org.example;\n\nimport static de.tobiasroeser.lambdatest.Expect.expectEquals;\n\nimport de.tobiasroeser.lambdatest.proxy.TestProxy;\nimport de.tobiasroeser.lambdatest.testng.FreeSpec;\n\npublic class ExampleProxyTest extends FreeSpec {\n  interface Dependency {\n    String hello();\n  }\n\n  class ServiceWithDependency {\n    private Dependency dependency;\n\n    public ServiceWithDependency(final Dependency dependency) {\n      this.dependency = dependency;\n    }\n\n    String usingDependency() {\n      return dependency.hello();\n    }\n\n    String notUsingDependency() {\n      return \"Have a nice day!\";\n    }\n  }\n\n  public ExampleProxyTest() {\n\n      test(\"A proxy without delegates as optional dependencies should be sufficient\", () -\u003e {\n        final Dependency dep = TestProxy.proxy(Dependency.class);\n        final ServiceWithDependency service = new ServiceWithDependency(dep);\n        expectEquals(service.notUsingDependency(), \"Have a nice day!\");\n      });\n\n      test(\"A proxy without delegates as mandatory dependencies should fail\", () -\u003e {\n        final Dependency dep = TestProxy.proxy(Dependency.class);\n        final ServiceWithDependency service = new ServiceWithDependency(dep);\n        intercept(UnsupportedOperationException.class, () -\u003e {\n          service.usingDependency();\n        });\n      });\n\n      test(\"A proxy with delegates as mandatory dependency should succeed\", () -\u003e {\n        final Dependency dep = TestProxy.proxy(Dependency.class, new Object() {\n          @SuppressWarnings(\"unused\")\n          public String hello() {\n            return \"Hello Proxy!\";\n          }\n        });\n        final ServiceWithDependency service = new ServiceWithDependency(dep);\n        expectEquals(service.usingDependency(), \"Hello Proxy!\");\n      });\n\n  }\n}\n----\n\n== Working on Java7\n\nEven though writing functional test makes most sense under Java 8+,\nthere are enough reasons to also use them on older Java versions which do not provide nice closures.\n\n{lambdatest} versions up to 0.7.1 didn't use any Java 8 API!\nYou can download pre-compiled binaries of {lambdatest} for older Java 7 Runtimes.\nTo use the non-Java8 version with Maven, use a classifier (\"java7\") to download the version you want.\nThe compatibility packages were produced with the great https://github.com/orfjackal/retrolambda[retrolambda project].\n\nTo use the latest Java7 compatible version 0.7.1 in Maven:\n\n[source,xml,subs=\"attributes,verbatim\"]\n----\n\u003cdependencies\u003e\n  \u003cdependency\u003e\n    \u003cgroupId\u003ede.tototec\u003c/groupId\u003e\n    \u003cartifactId\u003ede.tobiasroeser.lambdatest\u003c/artifactId\u003e\n    \u003cversion\u003e0.7.1\u003c/version\u003e\n    \u003cclassifier\u003ejava7\u003c/classifier\u003e\n    \u003cscope\u003etest\u003c/scope\u003e\n  \u003c/dependency\u003e\n  \u003c!-- Also you need one of JUnit or TestNG, see above --\u003e\n\u003c/dependencies\u003e\n----\n\nInstead of Java 8 Closures, you have to create anonymous classes.\n\n[source,java]\n----\nimport static de.tobiasroeser.lambdatest.Expect.expectEquals;\nimport de.tobiasroeser.lambdatest.RunnableWithException;\nimport de.tobiasroeser.lambdatest.junit.FreeSpec;\n\nclass SimpleTest extends FreeSpec {\n  public SimpleTest() {\n\n    test(\"1 + 1 = 2\", new RunnableWithException() {\n      public void run() throws Exception {\n        expectEquals(1 + 1, 2);\n      }\n    });\n\n    test(\"divide by zero\", new RunnableWithException() {\n      public void run() throws Exception {\n        int a = 2;\n        int b = 0;\n        intercept(ArithmeticException.class, new RunnableWithException() {\n          public void run() throws Exception {\n            int c = a / b;\n          }\n        });\n      }\n    });\n  }\n}\n----\n\n\n== Build {lambdatest} from Source\n\n=== Building with Maven\n\n{lambdatest} is build with https://maven.apache.org[Apache Maven 3.3.1] and the https://github.com/takari/polyglot-maven#overview[polyglot-scala extension]. Maven 3.5 is recommended.\n\n.Build LambdaTest from source\n----\nmvn clean install\n----\n\nThe built JARs file can be found in the `target` directory.\n\n=== Create `pom.xml` for interoperability, e.g. IDEs\n\nTo generate the `pom.xml` use the `gen-pom-xml` profile.\n\n.Creating `pom.xml` files\n----\nmvn -Pgen-pom-xml initialize\n----\n\n.Deleting generated `pom.xml` files\n----\nmvn -Pgen-pom-xml clean\n----\n\n\n== Licence\n\nThis project is published under the http://www.apache.org/licenses/LICENSE-2.0.txt[Apache Licence Version 2.0].\n\n== Contribution / Contact\n\nYour feedback is highly appreciated. I also accept pull request.\n\nFor questions please use the https://gitter.im/lefou/LambdaTest[Gitter chatroom].\nTo report issues or send pull request, use https://github.com/lefou/LambdaTest[GitHub].\n\nYou can also find me on https://twitter.com/TobiasRoeser[Twitter as @TobiasRoeser].\n\nIf you like {lambdatest}, please star it on https://github.com/lefou/LambdaTest[GitHub]. This will help me to set my priorities. Thanks!\n\n== Changelog\n\n=== LambdaTest 0.8.0 - 2023-02-28\n\n* Added support for JUnit 5 aka Jupiter.\n* Dropped released for Java 7\n* No longer use Asciidoclet to generate JavaDoc\n\n=== LambdaTest 0.7.1 - 2021-06-28\n\n* Added support for lazily initialized tests (with `initTests()`)\n\n=== LambdaTest 0.7.0 - 2019-01-10\n\n* Added `Expect.expectDouble` and `ExpectDouble` class to assert properties of double values with a fluent API.\n* Improved error message in TestProxy for missing implemented proxy methods with array parameters\n\n=== LambdaTest 0.6.2 - 2018-08-01\n\n* Fixed invalid Manifest entry `Import-Package` present in older releases.\n\n\n=== LambdaTest 0.6.1 - 2018-07-24\n\n* Dropped support for Java 6. (Technically speeking, Java 6 wasn't really supported by older versions, as a contructor of `java.lang.AssertionError` was used, which was only introduced in Java 7.)\n* Proxies created with `TestProxy` gained better copy'n'paste able error message in case of unimplemented methods were call. \n\n\n=== LambdaTest 0.6.0 - 2018-06-22\n\n* Added `Expect.expectCollection` and `ExpectCollection` class to assert properties of collection with a fluent API.\n* `TestProxy` now properly passes exceptions thrown by delegate objects.\n* Improved detection of test name collisions (reported as suite warning).\n* The default reporter can now be set via `FreeSpecBase.setDefaultReporter`.\n* Added `Expect.expectMap` and `ExpectMap` class to assert properties of maps with a fluent API.\n\n\n=== LambdaTest 0.5.0 - 2018-06-11\n\n* Added `TestProxy` in package `de.tobiasroeser.lambdatest.proxy` to easily create mock dependencies / proxies.\n\n=== LambdaTest 0.4.0 - 2018-03-05\n\n* Detect logging framework (slf4j or java.util.logging) and log test progress\n* Added `internal.Logger` and `internal.LoggerFactory` to wrap either an\n  Slf4j-Logger or a JUL-Logger, both supporting Slf4j parameter placeholders.\n* Added new `LoggingWrappingReporter` which logs to an logging frameorg and\n  delegates all methods to an underlying Reporter.\n* Changed handling of the \"optional\" msg-paramter in `Assert.assertXXX` and\n  `Expect.expectXXX` methods.\n  If given, the msg-parameter does no longer replace the generic assertion\n  message, instead both messages are shown, first the given message, then the\n  generic message.\n* Better handle arrays with primitive types.\n* Fixed issue, where a failing assert could throw a `ClassCastExcpetion` for\n  primitive type arrays.\n\n=== LambdaTest 0.3.1 - 2018-02-13\n\n* `DefaultReporter` can now hide the stacktrace\n* Improved `expectEquals` message for number and arguments of different types\n* Fixed inverted `expectNotNull` behaviour\n* Extended test suite\n\n=== LambdaTest 0.3.0 - 2017-10-30\n\n* Introduced `Reporter` interface and `DefaultReporter` class\n* Introduced generic base class `FreeSpecBase` to hold test framework unspecific logic\n* Added `FreeSpec.section` to allow more structured tests\n* Reformatted output of tests (handled now by `Reporter`)\n* Added `Assert.assertNull` and `Assert.assertNotNull`\n* Added `Expect.expectNull` and `Expect.expectNotNull`\n* Generate proper OSGi manifests for all JARs/bundles\n* Fixed assert message of `Intercept.intercept(Class\u003cT\u003e, String, RunnableWithException)`\n* Documentation improvements\n\n=== LambdaTest 0.2.4 - 2016-08-03\n\n* Added a pending method with a reason parameter.\n* Added more JavaDoc comments.\n\n=== LambdaTest 0.2.3 - 2016-05-10\n\n* Fixed fail late logic for Expect\n* Added new class ExpectString and Expect.expectString for fluent string assertions.\n\n=== LambdaTest 0.2.2 - 2016-05-03\n\n* Fixed Assert.assertEquals for Strings, especially when expected is empty or shorter than actual.\n\n=== LambdaTest 0.2.1 - 2016-03-04\n\n* Added `TempFile`, an utility class providing support to work with temporary files and directories which will be automatically cleaned up after the test case.\n\n=== LambdaTest 0.2.0 - 2016-02-12\n\n* Added JUnit support.\n  You can now use `de.tobiasroeser.lambdatest.junit.FreeSpec` for JUnit based tests in addition to the already existing  `de.tobiasroeser.lambdatest.testng.FreeSpec` for TestNG based tests.\n* Introduced new `Assert` and `Expect` classes. Expect-based asserts also support deferred exceptions. FreeSpec already integrates the setup of Expect.\n\n=== LambdaTest 0.1.0 - 2014-12-08\n\n* Also release compatibility packages for older Java runtimes: Java7 and Java6.\nThey are available via the \"java7\" and \"java6\" classifier.\n* FreeSpec.intercept now returns the intercepted exception.\n* Added FreeSpec.setRunInParallel to enable option to run tests in parallel.\n* Introduced LambdaTest interface (implemented by testng.FreeSpec) to contain the common API.\n\n=== Rerelease of LambdaTest 0.0.3 - 2014-11-29\n\n* Rerelease of 0.0.3 under \"de.tototec\" groupId.\nYou can now grab it directly from Maven Central without configuring a dedicated bintray repository.\n\n=== LambdaTest 0.0.3 - 2014-11-16\n\n* Fixed issue with missapplied close of STDOUT stream\n* Fixed bug preventing from TestNG seeing pending tests as skipped\n* de.tobiasroeser.lambdatest.testng.FreeSpec class no longer inherits org.testng.Assert\n\n=== LambdaTest 0.0.2 - 2014-10-18\n\n* Colored output\n* Added support to match exception messages with regex in intecept\n\n=== LambdaTest 0.0.1 - 2014-10-15\n\n* First release\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flefou%2Flambdatest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flefou%2Flambdatest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flefou%2Flambdatest/lists"}