Шаг 1: Создание класса Calculator для логики вычислений
public class Calculator { public int add(int a, int b) { return a + b; } public int subtract(int a, int b) { return a - b; } public int multiply(int a, int b) { return a * b; } public int divide(int a, int b) { if (b == 0) { throw new ArithmeticException("Division by zero is not allowed"); } return a / b; } }
Шаг 2: Создание класса CalculatorApp для взаимодействия с пользователем через консоль
import java.util.Scanner; public class CalculatorApp { public static void main(String[] args) { Calculator calculator = new Calculator(); Scanner scanner = new Scanner(System.in); System.out.print("Enter first number: "); int a = scanner.nextInt(); System.out.print("Enter operation (+, -, *, /): "); char operation = scanner.next().charAt(0); System.out.print("Enter second number: "); int b = scanner.nextInt(); int result = 0; switch (operation) { case '+': result = calculator.add(a, b); break; case '-': result = calculator.subtract(a, b); break; case '*': result = calculator.multiply(a, b); break; case '/': result = calculator.divide(a, b); break; default: System.out.println("Invalid operation"); } System.out.println("Result: " + result); scanner.close(); } }
Шаг 3: Создание тестов с использованием JUnit и DataProvider
import org.junit.Test; import static org.junit.Assert.assertEquals; public class CalculatorTest { Calculator calculator = new Calculator(); @Test public void testAdd() { assertEquals(5, calculator.add(2, 3)); } @Test public void testSubtract() { assertEquals(2, calculator.subtract(5, 3)); } @Test public void testMultiply() { assertEquals(15, calculator.multiply(5, 3)); } @Test public void testDivide() { assertEquals(2, calculator.divide(6, 3)); } @Test(expected = ArithmeticException.class) public void testDivideByZero() { calculator.divide(6, 0); } }
Шаг 4: Добавление зависимостей в файл pom.xml для использования Cucumber
<dependencies> <!-- JUnit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- Cucumber --> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-java</artifactId> <version>7.0.0</version> <scope>test</scope> </dependency> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-junit</artifactId> <version>7.0.0</version> <scope>test</scope> </dependency> </dependencies>
Шаг 5: Создание файлов сценариев для Cucumber (например, Calculator.feature)
Feature: Calculator Scenario: Addition Given I have entered 2 into the calculator And I have entered 3 into the calculator When I press add Then the result should be 5 on the screen Scenario: Division by zero Given I have entered 6 into the calculator And I have entered 0 into the calculator When I press divide Then an error message should be displayed
Шаг 6: Создание Step Definitions для Cucumber
import io.cucumber.java.en.Given; import io.cucumber.java.en.When; import io.cucumber.java.en.Then; import static org.junit.Assert.assertEquals; public class StepDefinitions { Calculator calculator = new Calculator(); int result; @Given("I have entered {int} into the calculator") public void enterNumber(int number) { // Implement logic to enter number into calculator } @When("I press add") public void pressAdd() { result = calculator.add(2, 3); } @When("I press divide") public void pressDivide() { try { result = calculator.divide(6, 0); } catch (ArithmeticException e) { // Handle division by zero error } } @Then("the result should be {int} on the screen") public void checkResult(int expectedResult) { assertEquals(expectedResult, result); } @Then("an error message should be displayed") public void checkErrorMessage() { // Implement logic to check for error message } }
Теперь у вас есть консольный калькулятор с тестами на весь функционал, включая использование Cucumber для BDD тестирования.
Обратите внимание: ответы, предоставляемые искусственным интеллектом, могут не всегда быть точными. Не рассчитывайте на них в критически важных областях, таких как медицина, юриспруденция, финансы или в вопросах, связанных с безопасностью. Для важных решений всегда обращайтесь к квалифицированным специалистам. Администрация сайта не несет ответственности за контент, сгенерированный автоматически.