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文档。

相关推荐

最新推荐

recommend-type

人人都是开发者:7款傻瓜式APP开发工具

国外的营销工作者和技术开发者开发了许多能帮助企业创建简单APP应用的工具,通过这些工具,就算是一个对程序一窍不通的普通网民都可以很容易的创建一个企业的APP程序,并可以对程序进行应用更新维护,开展营销等活动
recommend-type

Java语言简介+JDK安装+配置+第一个程序HelloWorld编译运行

Java 语言简介、JDK 安装和配置、第一个程序 HelloWorld 编译运行 Java 语言简介 Java是一种面向对象的程序设计语言,由Sun公司开发,主要是基于安全性和高效考虑。Java 不仅是一种语言,也是一种技术。它的原意...
recommend-type

深入浅析 C++ 调用 Python 模块

Python 提供了 C++ 库,使得开发者能很方便地从 C++ 程序中调用 Python 模块。接下来通过本文给大家介绍 C++ 调用 Python 模块的相关知识,需要的朋友参考下吧
recommend-type

Uniapp在IOS系统打包测试流程

1.通过蒲公英网站快速获取ios...2.登录苹果开发者社区 绑定测试iPhone/ipad 的udid 3.创建Identifiers标识符 4. 登录Appuploader申请iOS证书文件p12 5.创建与下载profile文件 6.打包ipa 7. Ipa 上传到蒲公英 发布测试
recommend-type

解决微信小程序云开发中获取数据库的内容为空的方法

主要介绍了解决微信小程序云开发中获取数据库的内容为空的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
recommend-type

STC89C51 简单时钟

STC89C51 简单时钟,叫你从基础开始学习单片机,
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB归一化方法大比拼:5种方法,哪种最适合你的数据?

![MATLAB归一化方法大比拼:5种方法,哪种最适合你的数据?](https://www.finebi.com/wp-content/uploads/2019/11/FineBI%E8%A1%8C%E4%B8%9A%E9%A9%BE%E9%A9%B6%E8%88%B1-1024x510.png) # 1. MATLAB归一化概述 归一化是一种数据预处理技术,用于将数据缩放到特定范围内,从而消除不同特征之间的尺度差异。在MATLAB中,有各种归一化方法可用于不同类型的数据和应用程序。 归一化的主要目的是: - 提高模型的训练效率和准确性,通过消除特征之间的尺度差异,使模型能够更有效地学习
recommend-type

failed to register layer: ApplyLayer exit status 1 stdout: stderr: archive/tar: invalid tar header

很抱歉听到这个问题。这个错误通常是由于Docker镜像损坏或Docker存储库中缺少所需的图层引起的。您可以尝试以下几种方法来解决这个问题: 1. 清理Docker镜像和容器:使用命令“docker system prune”清理不再使用的Docker对象。 2. 检查Docker存储库:确保您正在使用可靠的Docker存储库,并检查是否存在所有必需的图层。 3. 重新下载Docker镜像:如果您确定问题是由于损坏的Docker镜像引起的,则可以尝试重新下载Docker镜像。 4. 更新Docker版本:如果您使用的是旧版Docker,则可能会出现此问题。尝试更新到最新版本的Docke
recommend-type

Linux系统常用操作命令大全手册

附件是Linux系统常用操作命令大全手册,是 markdown格式,其中覆盖了Linux系统管理、文件操作、网络配置等多个方面,都是日常工作中非常常用的命令,欢迎大家下载学习使用!