Java 程序单元测试假设开发者开发了一个销售系统的“供货折扣计算模块”,该模块的业务逻辑需要满足以下规则: 1) 当客户为批发型企业时,若订货数大于 50 件且发货距离不超过 50 公里时,折扣率为15%;若订货数大于 50 件且发货距离超过 50 公里时,折扣率为 10%。 2) 当客户为非批发型企业时,若订货数大于 100 件且发货距离不超过 50 公里时,折扣率为 10%;若订货数大于 100 件且发货距离超过 50 公里时,折扣率为 5%。 3) 其他情况没有折扣,返回 0。 1. 针对给定的待测软件单元的需求规格说明与 Java 代码,设计测试用例(可设计简单的测试用例); 2. 使用 JUnit 测试框架编写测试用例代码,并使用 JMock 工具编写待测软件单元的桩模块。3. 将包含有测试代码的 project 打包
时间: 2024-03-21 13:41:52 浏览: 14
1. 测试用例设计:
(1)当客户为批发型企业,订货数大于50件,发货距离不超过50公里时,折扣率为15%
(2)当客户为批发型企业,订货数大于50件,发货距离超过50公里时,折扣率为10%
(3)当客户为非批发型企业,订货数大于100件,发货距离不超过50公里时,折扣率为10%
(4)当客户为非批发型企业,订货数大于100件,发货距离超过50公里时,折扣率为5%
(5)其他情况没有折扣,返回0
2. JUnit测试用例代码:
```java
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class DiscountCalculatorTest {
@Mock
DistanceCalculator distanceCalculator;
@Test
public void testWholesaleCustomerWithDiscount15Percent() {
Distance distance = new Distance();
distance.setDistance(40);
Mockito.when(distanceCalculator.getDistance()).thenReturn(distance);
DiscountCalculator calculator = new DiscountCalculator(distanceCalculator);
int discount = calculator.calculateDiscount(new Customer(true), 60);
Assert.assertEquals(15, discount);
}
@Test
public void testWholesaleCustomerWithDiscount10Percent() {
Distance distance = new Distance();
distance.setDistance(60);
Mockito.when(distanceCalculator.getDistance()).thenReturn(distance);
DiscountCalculator calculator = new DiscountCalculator(distanceCalculator);
int discount = calculator.calculateDiscount(new Customer(true), 70);
Assert.assertEquals(10, discount);
}
@Test
public void testNonWholesaleCustomerWithDiscount10Percent() {
Distance distance = new Distance();
distance.setDistance(40);
Mockito.when(distanceCalculator.getDistance()).thenReturn(distance);
DiscountCalculator calculator = new DiscountCalculator(distanceCalculator);
int discount = calculator.calculateDiscount(new Customer(false), 120);
Assert.assertEquals(10, discount);
}
@Test
public void testNonWholesaleCustomerWithDiscount5Percent() {
Distance distance = new Distance();
distance.setDistance(60);
Mockito.when(distanceCalculator.getDistance()).thenReturn(distance);
DiscountCalculator calculator = new DiscountCalculator(distanceCalculator);
int discount = calculator.calculateDiscount(new Customer(false), 150);
Assert.assertEquals(5, discount);
}
@Test
public void testNoDiscount() {
Distance distance = new Distance();
distance.setDistance(40);
Mockito.when(distanceCalculator.getDistance()).thenReturn(distance);
DiscountCalculator calculator = new DiscountCalculator(distanceCalculator);
int discount = calculator.calculateDiscount(new Customer(false), 90);
Assert.assertEquals(0, discount);
}
}
```
3. 使用 JMock 工具编写待测软件单元的桩模块:
```java
public class DistanceCalculator {
public Distance getDistance() {
// 实际代码中会根据实际情况返回距离信息
return new Distance();
}
}
```
4. 将包含有测试代码的 project 打包:
可使用Maven进行打包,具体操作参考Maven文档。