* 题目三:胶囊面积计算 * 一个胶囊的面积由一个正方形和一个园组成给出矩形的长和高,使用长方形和圆形计算出胶囊面积 * 请对下面的题目,采用语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖、基路径测试方法完成所有类的单元测试用例的设计、撰写与执行。 * 要求在顶层类测试中采用插桩技术进行测试。 **/
时间: 2024-01-22 11:19:34 浏览: 140
以下是对题目的单元测试用例设计、撰写与执行,其中采用了路径覆盖和插桩技术。
```java
public class Capsule {
private double length;
private double height;
public Capsule(double length, double height) {
this.length = length;
this.height = height;
}
public double calculateArea() {
double rectangleArea = length * height;
double circleArea = Math.PI * Math.pow(height / 2, 2);
return rectangleArea + circleArea;
}
}
```
```java
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class CapsuleTest {
@Test
public void testCalculateArea() {
Capsule capsule = new Capsule(4, 6);
assertEquals(51.849, capsule.calculateArea(), 0.001);
}
}
```
在进行路径覆盖测试时,我们需要设计一组测试用例,使得每个语句至少被执行一次,每个分支都被覆盖。根据代码的结构,我们可以得到以下的测试用例:
| 测试用例 | 长度 | 高度 | 预期结果 |
| -------- | ---- | ---- | -------- |
| Case 1 | 4 | 6 | 51.849 |
| Case 2 | 0 | 0 | 0 |
| Case 3 | 1 | 0 | 0 |
以上测试用例可以覆盖所有可能的执行路径:
- Case 1:正常情况,测试用例执行了所有语句和分支。
- Case 2:长度和高度都为 0 的情况,只执行了长方形面积计算语句和圆形面积计算语句。
- Case 3:长度为 1,高度为 0 的情况,只执行了长方形面积计算语句。
在执行测试用例时,我们可以使用插桩技术来记录每个语句的执行情况,以便于检查哪些语句没有被执行。以下是使用插桩技术修改后的代码和测试用例:
```java
public class Capsule {
private double length;
private double height;
public Capsule(double length, double height) {
this.length = length;
this.height = height;
}
public double calculateArea() {
double rectangleArea = length * height;
System.out.println("Executed: length * height");
double circleArea = Math.PI * Math.pow(height / 2, 2);
System.out.println("Executed: Math.PI * Math.pow(height / 2, 2)");
return rectangleArea + circleArea;
}
}
```
```java
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class CapsuleTest {
@Test
public void testCalculateArea() {
Capsule capsule = new Capsule(4, 6);
assertEquals(51.849, capsule.calculateArea(), 0.001);
}
@Test
public void testCalculateAreaWithZero() {
Capsule capsule = new Capsule(0, 0);
assertEquals(0, capsule.calculateArea(), 0.001);
}
@Test
public void testCalculateAreaWithZeroHeight() {
Capsule capsule = new Capsule(1, 0);
assertEquals(0, capsule.calculateArea(), 0.001);
}
}
```
在执行测试用例时,我们可以观察控制台输出的语句,以检查哪些语句没有被执行。如果有语句没有被执行到,说明测试用例没有覆盖到对应的执行路径,需要进一步完善测试用例。
阅读全文