如何在Java中设计并实现一个包含加法、减法、乘法和除法功能的简单计算器类,以及相应的单元测试用例?
时间: 2024-10-20 20:08:44 浏览: 0
在Java中设计一个简单的计算器类,我们可以创建一个名为`Calculator`的抽象类,并提供一些基本的操作方法。然后,可以创建两个具体的子类`ArithmeticCalculator`和`DecimalCalculator`分别处理整数和浮点数的计算。
首先,我们创建一个`Calculator`抽象类:
```java
public abstract class Calculator {
public abstract int add(int a, int b);
public abstract int subtract(int a, int b);
public abstract int multiply(int a, int b);
public abstract double divide(double a, double b); // 浮点数操作可能抛出异常
}
```
接着,我们为每个运算创建两个子类:
```java
public class ArithmeticCalculator extends Calculator {
@Override
public int add(int a, int b) {
return a + b;
}
@Override
public int subtract(int a, int b) {
return a - b;
}
@Override
public int multiply(int a, int b) {
return a * b;
}
// 由于Java内置了防止整数除以零的机制,这里无需特殊处理
@Override
public double divide(int a, int b) {
if (b != 0) {
return (double) a / b;
} else {
throw new IllegalArgumentException("Cannot divide by zero");
}
}
}
public class DecimalCalculator extends Calculator {
@Override
public double add(double a, double b) {
return a + b;
}
@Override
public double subtract(double a, double b) {
return a - b;
}
@Override
public double multiply(double a, double b) {
return a * b;
}
@Override
public double divide(double a, double b) {
if (b != 0) {
return a / b;
} else {
throw new IllegalArgumentException("Cannot divide by zero");
}
}
}
```
最后,编写单元测试用例:
```java
import org.junit.Test;
import static org.junit.Assert.*;
public class CalculatorTest {
private Calculator arithmeticCalculator = new ArithmeticCalculator();
private Calculator decimalCalculator = new DecimalCalculator();
@Test
public void testAdd() {
assertEquals(4, arithmeticCalculator.add(2, 2));
assertEquals(4.0, decimalCalculator.add(2.0, 2.0), 0.001);
}
// 添加其他测试用例,如subtract(), multiply(), 和 divide(),检查它们的功能是否正常
// 使用断言(assertNotEquals, assertEquals, assertTrue, assertFalse等)验证结果
// 例如:
@Test
public void testDivide() {
try {
assertEquals(2.0, decimalCalculator.divide(4, 2), 0.001);
} catch (IllegalArgumentException e) {
fail("Should not throw exception on valid division");
}
try {
decimalCalculator.divide(4, 0);
fail("Should throw an exception when dividing by zero");
} catch (IllegalArgumentException expected) {
}
}
}
```
阅读全文