A BDD-style test runner for Java 8. Inspired by Jasmine, RSpec, and Cucumber.

Overview

Spectrum

Build Status Codecov MIT License Download Gitter

A colorful BDD-style test runner for Java

Spectrum is inspired by the behavior-driven testing frameworks Jasmine and RSpec, bringing their expressive syntax and functional style to Java tests. It is a custom runner for JUnit, so it works with many development and reporting tools out of the box.

Spectrum with Eclipse via JUnit

Getting Started

Spectrum 1.2.0 is available as a package on JCenter and Maven Central.

Examples

Spectrum supports Specification-style tests similar to RSpec and Jasmine:

@RunWith(Spectrum.class)
public class Specs {{

  describe("A list", () -> {

    List<String> list = new ArrayList<>();

    afterEach(list::clear);

    it("should be empty by default", () -> {
      assertThat(list.size(), is(0));
    });

    it("should be able to add items", () -> {
      list.add("foo");
      list.add("bar");

      assertThat(list, contains("foo", "bar"));
    });

  });
}}

And also Gherkin-style tests similar to Cucumber:

@RunWith(Spectrum.class)
public class Features {{

  feature("Lists", () -> {

    scenario("adding items", () -> {

      Variable<List<String>> list = new Variable<>();

      given("an empty list", () -> {
        list.set(new ArrayList<>());
      });

      when("you add the item 'foo'", () -> {
        list.get().add("foo");
      });

      and("you add the item 'bar'", () -> {
        list.get().add("bar");
      });

      then("it contains both foo and bar", () -> {
        assertThat(list.get(), contains("foo", "bar"));
      });

    });

  });
}}

For more details and examples, see the documentation.

Can I Contribute?

Yes please! See CONTRIBUTING.md.

Comments
  • JUnit rules - attempt to implement them in Spectrum

    JUnit rules - attempt to implement them in Spectrum

    This appears to work for Mockito and TemporaryFolder as evidenced. It should work for Class rules too and needs roadtesting with Spring.

    It should ultimately solve #15 #49 and #34

    opened by ashleyfrieze 43
  • Grand unified theory of hooks

    Grand unified theory of hooks

    Still WIP at the moment - demonstrated purely by a replacement of the let function.

    I've reorganised the package structure, and I'm in the process of killing off all arounds/befores etc. First target - the humble let.

    Code coverage will not be 100% yet as there are unused features.

    Intended as a fix for #76 and #73. Eventually. Intended as a new platform on which to build #56

    opened by ashleyfrieze 25
  • @Rule and @ClassRule support

    @Rule and @ClassRule support

    JUnit provides @ClassRule and @Rule annotations, which would let me use the new @SpringBootTest annotation with Spectrum. Is there any plan to provide support for @ClassRule and @Rule? Thanks!

    opened by rkawala 19
  • Variables+awaitility only work if used in the same thread

    Variables+awaitility only work if used in the same thread

    i am not sure what you can do on your end, but thought I would report it anyhow. the following test case fails because Variables use a ThreadLocal, and awaitility by default happens to run in a separate one. The only way it works is if the user does an await().pollInsSameThread().

    java.lang.AssertionError: 
    Expected: not (null or an empty string)
         but: was null
    Expected :not (null or an empty string)
         
    Actual   :null
    
    package test;
    
    import com.greghaskins.spectrum.Spectrum;
    import com.greghaskins.spectrum.Variable;
    import org.junit.runner.RunWith;
    
    import static com.greghaskins.spectrum.Spectrum.describe;
    import static com.greghaskins.spectrum.Spectrum.it;
    import static org.awaitility.Awaitility.await;
    import static org.hamcrest.MatcherAssert.assertThat;
    import static org.hamcrest.Matchers.isEmptyOrNullString;
    import static org.hamcrest.Matchers.not;
    
    @RunWith(Spectrum.class)
    public class VariableTest {{
      describe("suite", () -> {
        final Variable<String> var = new Variable<>();
        it("test", () -> {
          var.set("value");
          await().until(() -> {
            assertThat(var.get(), not(isEmptyOrNullString()));
            return true;
          });
        });
      });
    }}
    
    opened by mxk1235 17
  • Integration with Mockito

    Integration with Mockito

    Hi Greg,

    I have been having at Spectrum and really like the way the tests get grouped together. I wondered if there was any support for mockito annotations, or if you knew a way to get them working.

    I have managed to get a Mockito test by explicitly constructing the mocks and then adding a manual call to validateMockitoUsage and reset in the afterEach, it just feels quite hard work.

    Normally I would add in a Mockito JUnit rule, annotate each mock and then construct the service in a before method. Having to manually construct the mocks is not too bad, but It would be great if there was some way to trigger the validate and reset at the end of each test.

    Thanks,

    Peter.

    opened by petergphillips 15
  • Organize and cleanup new features before release (part 1)

    Organize and cleanup new features before release (part 1)

    I'm working on a few things in this PR, and will update it as I go.

    In no particular order:

    • [x] Put all public APIs in one main package for easier discovery and import. Many of them will be available directly under Spectrum.class.
      • com.greghaskins.spectrum.internal.ConfiguredBlock
      • com.greghaskins.spectrum.model.BlockConfiguration.Factory
    • [x] Move as many internal things to the internal packages as possible. This will clarify the real public API.
    • [x] Update version numbers and deprecation notices in javadocs
    • [ ] Make sure nothing internal is involved in the public API (either as entry point, parameter, or return value). Some of these will need to move to main package as a result.
    • [ ] Resolve cyclic dependencies, at least involving the main package com.greghaskins.spectrum and it's classes.
    • [ ] ~Reduce the logging noise from the test suite. Mainly the Spring stuff spits a bunch of stderr messages.~
    • [ ] ~Determine which features should be marked and packaged as spectrum.experimental~
    opened by greghaskins 13
  • Spectrum 1.1.0 displays test case nested structure wrong in Intellij Idea

    Spectrum 1.1.0 displays test case nested structure wrong in Intellij Idea

    Unfortunately version 1.1.0 seems to have introduced funky behavior in Intellij Idea test output structure in case of exception inside tests.

    First the test code that throws exception: spectrumkoodi.png Second how Intellij Idea displays it with Spectrum 1.0.0 spectrum1.0.0.png Third the same test with Spectrum 1.1.0 spectrum1.1.0.png

    Happens at least with Intellij Idea 2017.1 and 2016.3.5

    opened by anttiahonen 8
  • Mockito annotations support?

    Mockito annotations support?

    We have found that using @Mock and @InjectMocks annotations don't work with spectrum, resulting in the mock causing a NullPointerException.

    It seems that the runner needs to do all the injections and mocking pretty early in the test execution, so that all instances are injected and/or mocked.

    This issue is somewhat related to this issue, but perhaps it's helpful to bring it up here separately.

    Thanks for the great framework,

    @ishustava && @larham

    opened by ishustava 7
  • When describe block contains () I am getting <no name> in IntelliJ

    When describe block contains () I am getting in IntelliJ

    describe("after creation of attribute", () -> {
            describe( "latest()", () -> {
                    it("should return 200", () -> {
                        mockMvc.perform(get("/api/latest/attribute")).andExpect(status().isOk());
                    });
            });
    });
    

    if I replace latest() with latest everything works fine!

    image

    image

    Thank you!

    opened by zifnab87 6
  • Provide native support for expected exceptions

    Provide native support for expected exceptions

    There are a few ways to test for some code ending in an exception.

    • Use a framework like AssertJ with assertThatThrownBy

    E.g.

    it("expects a boom", () -> {
       assertThatThrownBy(() -> { throw new Exception("boom!"); }).isInstanceOf(Exception.class)
                                                                 .hasMessageContaining("boom");
    }
    
    • Employ the ExpectedException rule from JUnit either with junitMixin or even raw with @Rule

    E.g.

    @Rule
    public ExpectedException expectedException = ExpectedException.none();
    
    {
       it("expects a boom", () -> {
             expectedException .expect(NullPointerException.class);
             throw new NullPointerException();
       });
    }
    
    • You could even do aroundEach
    describe("These all need an exception to be thrown", () -> {
       aroundEach(block -> {
          try {
             block.run();
          } catch (DesiredException e) {
             return;
          }
         fail("Desired exception not thrown. aaagh!");
       });
    });
    

    Each of these is plausible (though the last one sucks a bit), but not quite as neat as @Test(expected=SomeException.class) public void myTest() {} that you get in JUnit. Here are two motivations for some alternative:

    • A terse syntax for expecting exceptions that's part of the spec
    • Ability to define exception expectations hierarchically - i.e. group together in a context or describe a bunch of things that end in the same exception

    There are a couple of ways I could imagine doing this and I'd like feedback on which might be desirable:

    • As a BlockConfiguration as part of the with syntax
    • Using a hook, a bit like let to provide the expected exception similar to ExpectedException but more native to Spectrum

    Block Configuraton Approach

    This is hierarchical and can be applied anywhere in the tree

    e.g.

    describe("Suite", () -> {
       // all children are expected to thrown this exception, though they can specialise it
       // or even override it using the same `with` mechanism
       describe("throwing suite", with(expectedException(NullPointerException.class), () -> {
          it("Should throw", () -> {
              throw new NullPointerException();
          });
       }));
    
       it("doesn't have to throw", () -> {});
    
       it("requires its own exception", with(expectedException(RuntimeException.class, "boom!"), () -> {
           throw new RuntimeException("boom!");
       }));
    });
    
    

    Hook approach

    Let's use ExpectedException within Spectrum, or a clone of it if we don't want it to be too JUnit. What we end up with will be similar to let but will add an expected exception hook instead of a let hook.

    e.g.

    describe("Some suite", () -> {
       // start with the assumption that nothing throws, but each spec can modify the expectation
       Supplier<ExpectedException> expectedException = expectException(ExpectedException.none());
       it("wants an exception to be thrown", () -> {
           expectedException .get().expect(NullPointerException.class);
           throw new NullPointerException();
       });
    });
    
    // or
    
    describe("Some suite", () -> {
       // Start with the assumption that everything will throw
       Supplier<ExpectedException> expectedException = expectException(NullPointerException.class);
       it("wants an exception to be thrown", () -> {
           throw new NullPointerException();
       });
    });
    
    

    @greghaskins - your thoughts pls.

    opened by ashleyfrieze 5
  • features listed on README not released yet under tag v1.0.0

    features listed on README not released yet under tag v1.0.0

    The latest released git tag is 1.0.0, but there're a lot of amazing features listed on README which are not under any tag.

    Wouldn't that be better to remove those features from README until they are released or add notes telling the user those features are not under the latest released tag yet?

    There are about ~ 100 commits on master branch since v1.0.0. When are you guys going to release a new tag with all those features included?

    opened by marioluan 5
  • Add OSGi manifest so that Spectrum can be used in OSGi projects

    Add OSGi manifest so that Spectrum can be used in OSGi projects

    I'd like to use Spectrum in an OSGi-based project, but the JAR does currently not have an OSGi manifest. This can be easily added either in a hard-coded fashion by adding a src/main/resources/META-INF/MANIFEST.MF file, or by adding a build step to the Gradle build file that generates a manifest automatically. If there is a chance that such a change could get released to Maven Central soon, I'm happy to make a pull request with the necessary changes.

    opened by raner 0
  • JUnit report wrong when using nested scenarioOutline

    JUnit report wrong when using nested scenarioOutline

    Spectrum only offers Data-Driven-Tests with the scenarioOutline-method defined in the gherkinDSL. However, while they can be nested like SpecificationDSL's describe, the JUnit report isn't correct when more than one example is used. The report shows all examples but cannot assign a status to it, i.e show that it passed or failed.

    Here's a minimal example:

    @RunWith(Spectrum.class)
    public class NestedScenarioOutline
    {
        {
            feature("A feature", () ->
                {
                    scenarioOutline("The background with an example", (browser) ->
                        {
                            scenarioOutline("Eating less cucumbers than I have ", (have, eat, remaining) ->
                                {
                                    final AtomicInteger cukes = new AtomicInteger();
                                    given("I have " + have + " cucumbers", () ->
                                        {
                                            cukes.set(have);
                                        });
                                    when("I eat " + eat + " cucumbers", () ->
                                        {
                                            cukes.addAndGet(-eat);
                                        });
                                }, withExamples(example(12, 5, 7), example(20, 5, 15)));
    
                        }, withExamples(example("Chrome"), example("Firefox")));
                });
        }
    }
    

    And the corresponding report in Eclipse: image

    The first example, Chrome, does not have any status, neither do the children of it.

    In addition, if an error occurs, the test suite fails but no test shows any failure. Here's an example, which fails when the outer scenarioOutline receives "Chrome" as example:

    @RunWith(Spectrum.class)
    public class NestedScenarioOutline
    {
        {
            feature("A feature", () ->
                {
                    scenarioOutline("The background with an example", (browser) ->
                        {
                            scenario("Eating less cucumbers than I have ", () ->
                                {
                                    final AtomicInteger cukes = new AtomicInteger();
                                    given("I have 12 cucumbers", () ->
                                        {
                                            System.out.println("Current Browser is " + browser);
                                            cukes.set(12);
                                            if (browser.equals("Chrome"))
                                            {
                                                throw new AssertionError();
                                            }
                                        });
                                    when("I eat 5 cucumbers", () ->
                                        {
                                            cukes.addAndGet(-5);
                                        });
                                    then("I have 7 cucumbers left", () ->
                                        {
                                            assertThat(cukes.get(), equalTo(7));
                                        });
                                });
                            scenarioOutline("Eating less cucumbers than I have ", (have, eat, remaining) ->
                                {
                                    final AtomicInteger cukes = new AtomicInteger();
                                    given("I have " + have + " cucumbers", () ->
                                        {
                                            cukes.set(have);
                                        });
                                    when("I eat " + eat + " cucumbers", () ->
                                        {
                                            cukes.addAndGet(-eat);
                                        });
                                    then("I have " + remaining + " cucumbers left", () ->
                                        {
                                            assertThat(cukes.get(), equalTo(remaining));
                                        });
                                }, withExamples(example(12, 5, 7), example(20, 5, 15)));
    
                        }, withExamples(example("Chrome"), example("Firefox")));
                });
        }
    }
    

    The JUnit report as shown in Eclipse: image

    The report further shows, that the when and then step of the scenario in the scenarioOutline were ignored, which isn't true for the Firefox example.

    Since a scenarioOutline can already contain other scenario(Outline)s, it would be nice if the report were correct. This would also add the ability to supply test data to Spectrum's fixtures (beforeEach, beforeAll, etc.) , which is often very helpful.

    opened by ckeiner 1
  • [Question] How stop test?

    [Question] How stop test?

    How I can stop queue of tests in spec if one of test is fail?

            describe("some spec", () -> {
                it("First test", () -> {});
                it("Second test", () -> { // something broken });
                it("Third test", () -> {});
            });
    

    if second test will is broken, third test will not run.

    opened by A11oW 3
  • Feature Request: Support for Shared Examples and Shared Contexts

    Feature Request: Support for Shared Examples and Shared Contexts

    This may just be something I'm overlooking in the docs -- or that could use an example -- but is there a way to do RSpec-style shared contexts and shared examples?

    For example, I just wrote my first test using Spectrum, which looked like this:

    @RunWith(Spectrum.class)
    public class EnumsTest {
      {
        describe(".findValueOrThrow", () -> {
          context("when given an Enum that has no values", () -> {
            final Supplier<Class<EmptyEnum>> enumClass = let(() -> EmptyEnum.class);
    
            it("throws an IllegalArgumentException", () -> {
              assertThatExceptionOfType(IllegalArgumentException.class)
                .isThrownBy(() -> {
                  Enums.findValueOrThrow(enumClass.get(), (value) -> true);
                })
                .withMessage(
                  "No `com.rosieapp.util.EnumsTest.EmptyEnum` was found that matched the specified " +
                  "filter.")
                .withNoCause();
            });
          });
    
          context("when given an Enum that has values", () -> {
            final Supplier<Class<Colors>> enumClass = let(() -> Colors.class);
    
            context("when the predicate does not match any of the values", () -> {
              final Supplier<Predicate<Colors>> predicate = let(() -> (color) -> false);
    
              it("throws an IllegalArgumentException", () -> {
                assertThatExceptionOfType(IllegalArgumentException.class)
                  .isThrownBy(() -> {
                    Enums.findValueOrThrow(enumClass.get(), predicate.get());
                  })
                  .withMessage(
                    "No `com.rosieapp.util.EnumsTest.Colors` was found that matched the specified " +
                    "filter.")
                  .withNoCause();
              });
            });
    
            context("when the predicate matches one of the values", () -> {
              final Supplier<Predicate<Colors>> predicate = let(() -> (color) -> color.name().equals("WHITE"));
    
              it("returns the matching value", () -> {
                assertThat(Enums.findValueOrThrow(enumClass.get(), predicate.get()), is(Colors.WHITE));
              });
            });
    
            context("when the predicate matches multiple values", () -> {
              final Supplier<Predicate<Colors>> predicate = let(() ->
                (color) -> !Arrays.asList("RED", "WHITE").contains(color.name()));
    
              it("returns the first matching value, according to the order within the enum", () -> {
                assertThat(Enums.findValueOrThrow(enumClass.get(), predicate.get()), is(Colors.BLUE));
              });
            });
          });
        });
      }
      // ...
    }
    

    Two of those scenarios are expected to throw the same exception with nearly the same error message. In RSpec, I'd abstract that out into a shared example group and then control what's provided using let. If shared example groups are out of the question, what would be the best practice when using Spectrum for this?

    opened by GuyPaddock 4
  • `Describe` and `it` texts should be displayed if test fails

    `Describe` and `it` texts should be displayed if test fails

    Coming from Ruby and RSpec, I am used to see the texts from describe and it blocks in the error message when the test fails.

    I would assume something similar to this example:

    describe("Spectrum", () -> {
            it("can make assertions", () -> {
                assertThat(true, is(false));
            });
    });
    

    Output might look like

    Test failed: Spectrum, it can make assertions (/thisIs/A/PathTo/MyTestFile:15)
    Expected: is <false>
         but: was <true>
    

    with "/thisIs/A/PathTo/MyTestFile:15" indicating the line in which the it block starts.

    wdyt?

    opened by Kiemes 0
Releases(1.2.0)
  • 1.2.0(Sep 1, 2017)

    This release resolves #115, where the Variable object had unexpected behavior in cases where there were multiple threads in the same test. PR #118 simplifies the implementation such that Variable and let() values can be shared across threads just like any other pointer.

    With 1.2.0, using Spectrum with libraries such as Awaitility and Unirest is much more straightforward.

    Thanks to @mxk1235, @bjornblomqvist, and @ashleyfrieze for help on this!

    To get started using this latest release, see the quickstart walkthrough.

    Source code(tar.gz)
    Source code(zip)
  • 1.1.1(Apr 26, 2017)

    This release includes fixes for #110 to improve the reporting in IDEs when a spec fails. See also #111, #112.

    Thanks to @ashleyfrieze for jumping in and submitting these fixes!

    To get started using this latest release, see the quickstart walkthrough.

    Source code(tar.gz)
    Source code(zip)
  • 1.1.0(Mar 22, 2017)

    We've been working on several big new features for Spectrum over the last several months, and are proud to include them in this release. 🎉

    • Gherkin-style test DSL with given / when / then
    • Support for most JUnit 4 @Rules like MockitoJUnit and SpringJUnit
    • Tagging/filtering tests to include/exclude a specified subset
    • The Variable<T> helper class for shared state across closures
    • context alias for describe, similar to RSpec and Ginkgo
    • RSpec-style aroundEach and aroundAll hooks for advanced users and plugin authors
    • Expanded and improved documentation
    • Several other small improvements and bug fixes
    • Full backward-compatibility with 1.0.0

    A special thank you to @ashleyfrieze for driving many of these changes, and to @richdouglasevans and @evertones for contributing as well!

    To get started using this latest release, see the quickstart walkthrough.

    Source code(tar.gz)
    Source code(zip)
  • 1.0.2(Feb 28, 2017)

    Spectrum is now available on Maven Central! This much-requested feature will make it even easier to start using Spectrum for your project.

    Gradle:

    testCompile 'com.greghaskins:spectrum:1.0.2'
    

    Maven:

    <dependency>
        <groupId>com.greghaskins</groupId>
        <artifactId>spectrum</artifactId>
        <version>1.0.2</version>
        <scope>test</scope>
    </dependency>
    

    The 1.0.2 version bump does not add or change any functionality from 1.0.0; it consists only of changes to pom.xml and deployment scripts required to get Spectrum onto Sonatype's OSSRH.

    Source code(tar.gz)
    Source code(zip)
  • 1.0.0(Nov 25, 2016)

    This release solidifies the current behavior of Spectrum and marks a semver MAJOR milestone. Future versions in the 1.x branch are guaranteed to be backwards-compatible to this point.

    Binary and source releases for Spectrum are available on JCenter. See the getting started section in the README for installation and setup instructions.

    Source code(tar.gz)
    Source code(zip)
  • 0.7.1(Aug 10, 2016)

    This release includes PR #41, which is an interim fix for the scenario where an exception is thrown both in beforeEach and afterEach, only the afterEach error would be reported. Thanks to @pivotal-stuart-pollock and @pjk25 for identifying the issue and submitting a fix! Now, the beforeEach error will be visible where it wasn't before.

    Full support for equivalent behavior to RSpec will be coming in a future release.

    Binary and source releases for Spectrum are available on JCenter. See the getting started section in the README for installation and setup instructions.

    Source code(tar.gz)
    Source code(zip)
  • 0.7.0(Jul 21, 2016)

  • 0.6.1(Feb 20, 2016)

  • 0.6.0(Feb 4, 2016)

    This release introduces the fit and fdescribe blocks to focus on a particular spec or suite, respectively.

    Binary and source releases for Spectrum are available on jcenter. See the getting started section in the README for installation and setup instructions.

    Source code(tar.gz)
    Source code(zip)
  • 0.4.0(Aug 10, 2016)

    A BDD-style test runner for Java + JUnit.

    Features:

    • it() blocks to declare tests
    • describe() blocks to group related tests
    • Multiple and nested describe() blocks to organize things however makes sense
    • beforeEach() / afterEach() / beforeAll() / afterAll() for setting up and tearing down shared state within a describe() block

    See also the introductory blog post where I explain the motivation behind Spectrum.

    Source code(tar.gz)
    Source code(zip)
    spectrum-0.4.0.jar(11.47 KB)
Owner
Greg Haskins
Greg Haskins
BDD framework for automation using Selenium Cucumber and TestNg

Selenium Framework with Cucumber BDD framework for automation using Selenium Cucumber and TestNg The framework has following features Modular Design M

null 3 Jan 20, 2022
A simple yet powerful parameterized test runner for Java.

TestParameterInjector Introduction TestParameterInjector is a JUnit4 test runner that runs its test methods for different combinations of field/parame

Google 324 Dec 30, 2022
Serenity BDD is a test automation library designed to make writing automated acceptance tests easier, and more fun.

That feeling you get when you know you can trust your tests Serenity BDD is a library designed to make writing automated acceptance tests easier, and

Serenity BDD 654 Dec 28, 2022
Framework for Mobile test automation using Appium with Java - BDD

appium-mobile-automation-framework-bdd Mobile automation framework using appium - BDD ?? Quick Start - Appium set up on Windows (Android): Install Jav

Thangaraj 18 Oct 19, 2022
Arbitrary test data generator for parameterized tests in Java inspired by AutoFixture.

AutoParams AutoParams is an arbitrary test data generator for parameterized tests in Java inspired by AutoFixture. Sometimes setting all the test data

null 260 Jan 2, 2023
Randomized Testing (Core JUnit Runner, ANT, Maven)

RANDOMIZED TESTING ================== JUnit test runner and plugins for running JUnit tests with pseudo-randomness. See the following for more infor

null 167 Dec 26, 2022
A TestNG like dataprovider runner for JUnit with many additional features

junit-dataprovider Have a look to this repositories Wiki pages for documenation, usage examples and further information. Table of contents Home What i

TNG Technology Consulting GmbH 237 Sep 7, 2022
A template for Spring Boot REST API tested with JUnit 5 and Cucumber 6

demo-bdd Un template Spring Boot pour lancer un BDD/ATDD avec Cucumber 6 et JUnit 5. Maven et le JDK 17 seront nécessaires. Exécuter les tests Le proj

Rui Lopes 4 Jul 19, 2022
Cucumber for the JVM

Cucumber JVM Cucumber-JVM is a pure Java implementation of Cucumber. You can run it with the tool of your choice. Cucumber-JVM also integrates with al

Cucumber 2.5k Jan 5, 2023
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
This repository includes selenium tests examples using cucumber-jvm framework.

Cucumber Selenium Tests This repository includes cucumber selenium tests examples using wikipedia.org. Run tests To run tests on your local machine, y

Denys Vozniuk 3 Nov 27, 2022
Um projeto simples usando Serenity BDD desenvolvido para testes backend.

?? EM CONSTRUÇÂO ?? Um pouco sobre Serenity e o projeto desenvolvido Serenity_BDD é uma biblioteca de código aberto que visa tornar a ideia de documen

null 10 Aug 30, 2022
Um projeto simples usando Serenity BDD desenvolvido para testes backend.

?? EM CONSTRUÇÂO ?? Um pouco sobre Serenity e o projeto desenvolvido Serenity_BDD é uma biblioteca de código aberto que visa tornar a ideia de documen

null 10 Aug 30, 2022
Master Selenium Framework BDD

Automation Testing | Web | API | Atomic Tests | Cucumber | Java | OOPS | Selenium WebDriver | TestNG | Maven | Cucumber Reports | Java mail API | Design Patterns (Page Object Model, Singleton) | Jenkins

Rajat Verma 38 Dec 14, 2022
make async-await code style available in java just like csharp and es6

JAsync - the async-await pattern of Java 中文版 JAsync implements Async-Await pattern just like es in Java. It allows developers to write asynchronous co

null 124 Dec 26, 2022
Yet another Java annotation-based command parsing library, with Dependency Injection inspired by Guice

Commander A universal java command parsing library Building This project uses Gradle. Clone this repository: git clone https://github.com/OctoPvP/Comm

OctoDev 4 Oct 2, 2022
JUnit 5 Parameterized Test Yaml Test Data Source

Yamaledt — JUnit 5 Parameterized Tests Using Yaml and Jamal Introduction and usage Note This is the latest development documentation. This is a SNAPSH

Peter Verhas 4 Mar 23, 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
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