FreakyF / Weather-track

A simple real-time weather tracking app with graphical user interface written in java.
MIT License
0 stars 0 forks source link

Decide on a Unit Testing Framework #26

Closed Tymisko closed 1 year ago

Tymisko commented 1 year ago

Unit testing is a vital part of ensuring the quality of our application by catching issues early in the development process. In this task, we need to decide on a unit testing framework suitable for our Java application.

Tasks include:

Acceptance Criteria:

  1. A thorough comparison of different unit testing frameworks has been conducted.
  2. A unit testing framework has been chosen for our project.
FreakyF commented 1 year ago

Feature comparison

Feature JUnit TestNG JBehave
Test Annotations JUnit uses annotations like @Test, @Before, @After to define test methods and setup/teardown methods. TestNG also provides annotations like @Test, @BeforeMethod, @AfterMethod for defining test methods and setup/teardown methods. JBehave uses annotations like @Given, @When, @Then, and @BeforeScenario to define scenarios and steps.
Assert Framework JUnit provides a built-in assert framework for making assertions about expected outcomes in tests. TestNG also includes an assert framework similar to JUnit for making assertions in tests. JBehave does not have a built-in assert framework, but it can be used in conjunction with other frameworks like JUnit or TestNG for making assertions.
Data-Driven Testing JUnit supports data-driven testing using parameterized tests with the @ParameterizedTest annotation. TestNG has built-in support for data-driven testing through various features like @DataProvider and test parameters. JBehave supports data-driven testing through the use of Examples tables and data transformers.
Parallel Test Execution JUnit 5 introduced parallel test execution support with the @Execution annotation, allowing tests to run in parallel. TestNG has robust support for parallel test execution out of the box, enabling tests to run concurrently across multiple threads or even on distributed environments. JBehave does not have built-in support for parallel test execution, but it can be combined with other frameworks or tools to achieve parallelism.
Mocking Capabilities JUnit does not have native mocking capabilities. However, it can be used in conjunction with Mockito or other mocking frameworks to mock dependencies. TestNG does not have native mocking capabilities either but can be combined with Mockito or other mocking frameworks for mocking dependencies. JBehave does not have built-in mocking capabilities but can be used with mocking frameworks like Mockito or JMock.
Test Execution Order JUnit 4 executes test methods in a deterministic but unspecified order. JUnit 5 introduced a new execution order feature with @TestMethodOrder annotation to specify order constraints. TestNG allows explicit ordering of test methods using the @Test annotation’s dependsOnMethods parameter or through the use of @Test(priority = x) to assign priorities to tests. JBehave executes scenarios in the order they are defined in the story files.
IDE and Tool Support JUnit has excellent support in popular Java IDEs like Eclipse and IntelliJ IDEA. It integrates with build tools like Maven and Gradle. TestNG is also well-supported in Java IDEs and integrates with popular build tools. It provides additional features like test configurations and advanced reporting. JBehave has plugins available for popular Java IDEs and integrates with build tools like Maven and Gradle. It also provides reporting and other advanced features.

Summary

The unit testing framework for this project will be Junit because of its features, and also because it's the most popular one.