You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
test1/ticketing-master/src/com/cn/test/TrainServiceTest.java

257 lines
18 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.cn.test;
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;
import org.junit.Test;
import com.cn.domain.Train;
import com.cn.service.TrainService;
import com.cn.service.impl.TrainServiceImpl;
/**
*
* @ClassName: TrainServiceTest
* @Description: TrainService的测试类主要用于对与列车相关的业务逻辑服务TrainService中的各个方法进行单元测试
* 验证如添加列车信息、删除列车信息、更新列车信息以及多种条件下查询列车信息等功能是否能正确执行,
* 以此确保TrainService所提供的功能符合预期并能与底层数据存储正确交互。
* @author: ljy
* @date: 2019年9月16日 下午10:53:36
*/
public class TrainServiceTest {
// 创建TrainService接口的具体实现类TrainServiceImpl的实例后续将通过该实例调用TrainService中定义的各个业务方法
// 来测试不同的列车信息操作功能。
private TrainService trainService = new TrainServiceImpl();
/**
* @Test注解表明这是一个JUnit测试方法用于测试向数据库中添加单条列车信息的功能。
* 在此方法中先创建一个Train对象并设置好相应的列车属性信息然后调用trainService的add方法将该列车信息添加到数据库中
* 最后通过打印返回结果来查看添加操作是否成功执行。
*/
@Test
public void testAdd() {
// 创建一个Train对象该对象用于封装要添加到数据库中的列车信息其各个属性对应数据库中列车信息表的不同字段。
Train train = new Train();
// 设置列车的车次编号,这里将其设置为"K322",这是一个示例车次,实际应用中应符合实际的车次命名规则和业务要求。
train.setTrainNumber("K322");
// 设置列车的起始站名称,将其设置为"北京",表示列车出发的站点。
train.setStartStation("北京");
// 设置列车的终点站名称,此处设为"天津",代表列车最终要到达的站点。
train.setEndStation("天津");
// 设置列车的出发时间,采用"yyyy-MM-dd HH:mm:ss"格式的字符串来表示时间这里设置的具体时间为2019-09-01 15:30:00
// 该格式需与数据库中对应时间字段的存储格式相匹配,以确保能正确插入数据。
train.setStartTime("2019-09-01 15:30:00");
// 设置列车的到达时间,同样遵循"yyyy-MM-dd HH:mm:ss"格式设置为2019-09-01 16:50:00用于表示列车预计到达终点站的时间。
train.setEndTime("2019-09-01 16:50:00");
// 设置列车的票价单位通常为某种货币单位比如人民币元这里设置为200仅作为测试用途的示例价格数值。
train.setPrice(200);
// 设置列车的座位数量此处设为1000个座位同样是用于测试的一个示例数量值。
train.setSeatNumber(1000);
// 获取当前系统时间并将其转换为Timestamp类型用于设置列车信息的添加时间即记录这条列车信息是什么时候被录入到系统中的。
// 以下是两种获取Timestamp的方式这里采用了直接利用Date类的getTime方法获取时间戳再通过该时间戳构造Timestamp对象的方式。
// 注释掉的代码是先使用SimpleDateFormat将Date对象格式化为指定的日期时间字符串格式"yyyy-MM-dd HH:mm:ss"
// 再通过Timestamp的valueOf方法将格式化后的字符串转换为Timestamp类型的方式两种方式都能达到目的只是实现途径略有不同。
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// Timestamp addTime = Timestamp.valueOf(sdf.format(new Date()));
Timestamp addTime = new Timestamp(new Date().getTime());
train.setAddTime(addTime);
int recordNumber = 0;
try {
// 调用trainService的add方法该方法在TrainService接口中定义并由TrainServiceImpl类实现具体逻辑。
// 其内部会构建合适的SQL插入语句与数据库建立连接然后将Train对象所包含的列车信息插入到数据库对应的列车信息表中
// 返回值recordNumber通常表示受影响的数据库记录行数在成功插入一条记录的情况下一般返回值为1这里将其打印输出
// 以便查看添加操作是否按预期成功执行,如果出现异常则返回值可能不符合预期或者抛出异常。
recordNumber = trainService.add(train);
System.out.println(recordNumber);
} catch (Exception e) {
// 如果在执行添加列车信息的操作过程中出现了任何异常例如数据库连接失败、SQL语法错误、违反数据库约束等情况
// 通过e.printStackTrace()方法打印异常的栈追踪信息,方便开发人员排查问题所在,确定是哪部分代码或者数据库相关配置导致了异常的出现。
e.printStackTrace();
}
}
/**
* @Test注解表明这是一个JUnit测试方法用于测试批量添加列车信息到数据库的功能。
* 通过循环创建多条不同的列车信息记录并在每次循环中调用trainService的add方法将这些记录依次添加到数据库中
* 模拟在实际业务场景中批量录入列车数据的操作情况,以此来验证批量添加功能的正确性和稳定性。
*/
@Test
public void testBatchAdd() {
for (int i = 1; i <= 300; i++) {
Train train = new Train();
train.setTrainNumber("K3" + i);
train.setStartStation("北京" + i);
train.setEndStation("天津" + i);
train.setStartTime("2020-01-01 15:30:00");
train.setEndTime("2020-01-02 16:50:00");
train.setPrice(200 + i);
train.setSeatNumber(1000 + i);
// 获取当前系统时间并转换为Timestamp类型用于设置每条列车信息的添加时间其原理与testAdd方法中设置添加时间的操作相同
// 都是为了记录每条列车信息被录入系统的具体时间点同样采用直接获取时间戳构造Timestamp对象的方式注释掉的另一种方式不再赘述。
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// Timestamp addTime = Timestamp.valueOf(sdf.format(new Date()));
Timestamp addTime = new Timestamp(new Date().getTime());
train.setAddTime(addTime);
int recordNumber = 0;
try {
// 每次循环都调用trainService的add方法将当前创建的Train对象所代表的列车信息添加到数据库中
// 并打印每次添加操作返回的记录数,通过查看这些返回值可以判断每条记录是否成功插入数据库,以及插入过程中是否遇到异常情况,
// 例如如果某一次返回值不为1在预期每条记录都应正常插入的情况下则可能表示该次插入出现了问题需要进一步排查。
recordNumber = trainService.add(train);
System.out.println(recordNumber);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* @Test注解表明这是一个JUnit测试方法用于测试根据列车ID从数据库中删除对应列车信息的功能。
* 在此方法中调用trainService的delete方法并传入指定的列车ID值尝试从数据库中删除相应的列车记录
* 最后通过打印返回结果来查看删除操作是否成功执行。
*/
@Test
public void testDelete() {
try {
// 调用trainService的delete方法该方法的具体实现位于TrainServiceImpl类中其内部会构建相应的SQL删除语句
// 根据传入的列车ID这里传入的硬编码值为5仅作为测试示例实际应用中应根据具体业务需求获取要删除的列车ID
// 在数据库中查找并删除对应的列车记录,处理数据库连接以及执行删除操作等相关事宜。
// 返回值recordNumber通常表示受影响的数据库记录行数若成功删除对应的列车记录返回值一般为1若数据库中不存在该ID对应的记录则返回值为0。
// 将返回的recordNumber打印输出便于查看删除操作是否按预期成功执行。
int recordNumber = trainService.delete(5);
System.out.println(recordNumber);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @Test注解表明这是一个JUnit测试方法用于测试更新数据库中列车信息的功能。
* 先创建一个包含更新后信息的Train对象设置好相应的列车属性以及要更新的列车记录的ID然后调用trainService的update方法
* 将这些更新内容应用到数据库中对应的列车记录上,最后通过打印返回结果来查看更新操作是否成功执行。
*/
@Test
public void testUpdate() {
Train train = new Train();
// 设置要更新的列车记录在数据库中的唯一标识ID这里将其设置为18代表要更新的是数据库中ID为18的列车记录
// 通过这个ID可以准确找到对应的列车信息行进行更新操作实际应用中该值应根据具体业务需求来确定比如通过用户输入或者其他业务逻辑获取。
train.setTrainId(18);
train.setTrainNumber("XXX11");
train.setStartStation("北京");
train.setEndStation("天津");
train.setStartTime("2019-09-01 15:30:00");
train.setEndTime("2019-09-01 16:50:00");
train.setPrice(200);
train.setSeatNumber(1000);
// 以下两行代码原本用于设置更新时间与添加时间类似的处理方式获取Timestamp但此处被注释掉了可能是根据业务需求不需要更新该字段
// 或者在其他地方统一处理更新时间相关的逻辑,具体需结合整个业务实现情况来看。
// Timestamp addTime = new Timestamp(new Date().getTime());
// train.setAddTime(addTime);
try {
// 调用trainService的update方法该方法在TrainService接口中定义并由TrainServiceImpl类实现具体更新逻辑
// 其内部会根据传入的Train对象所携带的更新信息在数据库中查找并更新对应ID的列车记录例如构建合适的SQL更新语句、
// 处理数据库连接以及执行更新操作等返回值recordNumber通常表示受影响的数据库记录行数若成功更新对应的列车记录返回值一般为1
// 若数据库中不存在该ID对应的记录则返回值为0将返回的recordNumber打印输出便于查看更新操作是否按预期成功执行。
int recordNumber = trainService.update(train);
System.out.println(recordNumber);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @Test注解表明这是一个JUnit测试方法用于测试从数据库中获取所有列车信息的功能。
* 调用trainService的getAll方法获取数据库中全部的列车记录然后遍历获取到的列车信息列表将每条列车信息打印输出
* 以此来验证查询所有列车信息的功能是否能正确执行,查看返回的列车信息是否符合预期。
*/
@Test
public void testGetAll() {
try {
// 调用trainService的getAll方法该方法的具体实现位于TrainServiceImpl类中其内部会构建相应的SQL查询语句
// 执行查询操作从数据库的列车信息表中获取所有记录并将这些记录封装为Train对象列表返回以便后续进行遍历和处理。
List<Train> list = trainService.getAll();
for (Train train : list) {
// 遍历获取到的列车信息列表通过调用train对象的toString方法将每条列车信息以字符串的形式打印输出
// toString方法通常会按照一定的格式展示列车对象的各个属性信息方便查看查询结果的具体内容了解所有列车的详细情况。
System.out.println(train.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @Test注解表明这是一个JUnit测试方法用于测试根据列车ID从数据库中获取对应列车信息的功能。
* 在此方法中先定义要查询的列车记录在数据库中的唯一标识ID然后调用trainService的getById方法
* 根据该ID查询并获取相应的列车记录最后将获取到的列车信息打印输出以此验证按ID查询列车信息的功能是否正确。
*/
@Test
public void testGetById() {
try {
// 定义要查询的列车记录在数据库中的唯一标识ID这里将其设置为2代表要获取ID为2的列车信息仅作为测试示例
// 实际应用中可根据具体业务场景通过合适的方式获取相应的列车ID值比如从用户输入、其他关联数据等途径获取。
Integer trainId = 2;
// 调用trainService的getById方法该方法的具体实现位于TrainServiceImpl类中其内部会构建合适的SQL查询语句
// 根据传入的列车ID在数据库中查找并获取对应列车记录将查询到的列车信息封装为Train对象返回以便后续进行展示或其他处理。
Train train = trainService.getById(trainId);
// 打印输出获取到的列车信息通过调用train对象的toString方法将列车对象的各个属性以字符串形式展示出来
// 方便查看查询结果,确认获取到的列车信息是否符合预期。
System.out.println(train.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @Test注解表明这是一个JUnit测试方法用于测试根据列车车次编号从数据库中获取对应列车信息的功能。
* 先定义要查询的列车车次编号然后调用trainService的getByTrainNumber方法根据该车次编号查询并获取相应的列车记录
* 最后遍历并打印输出获取到的列车信息,以此验证按车次编号查询列车信息的功能是否有效。
*/
@Test
public void testGetByTrainNumber() {
try {
// 定义要查询的列车车次编号,这里将其设置为"XXX11",代表要获取车次编号为"XXX11"的列车信息,仅作为测试示例,
// 实际应用中根据具体业务场景传入相应的车次编号值,比如用户输入想要查询的车次信息等情况。
String trainNumber = "XXX11";
// 调用trainService的getByTrainNumber方法该方法的具体实现位于TrainServiceImpl类中其内部可能会构建类似模糊查询如果支持模糊查询的话
// 或精确查询的SQL语句根据传入的列车车次编号在数据库中查找并获取对应列车记录将查询到的列车信息封装为Train对象列表返回以便后续遍历展示。
List<Train> list = trainService.getByTrainNumber(trainNumber);
for (Train train : list) {
// 遍历获取到的列车信息列表通过调用train对象的toString方法将每条列车信息以字符串形式打印输出
// 方便查看查询到的符合条件的列车记录内容,确认是否获取到了期望的列车信息。
System.out.println(train.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @Test注解表明这是一个JUnit测试方法用于测试根据列车起始站、终点站以及出发日期从数据库中获取对应列车信息的功能。
* 先传入指定的起始站、终点站和出发日期参数然后调用trainService的getByStartEndStation方法
* 根据这些条件查询并获取符合要求的列车记录,最后遍历并打印输出获取到的列车信息,以此验证按多条件查询列车信息的功能是否正确。
*/
@Test
public void testGetByStartEndStation() {
try {
// 调用trainService的getByStartEndStation方法传入列车的起始站名称这里设置为"上海")、终点站名称(设置为"广州")以及出发日期(设置为"2019-09-01"
// 该方法的具体实现位于TrainServiceImpl类中其内部会构建相应的SQL查询语句根据这些条件在数据库中筛选出符合要求的列车记录
// 执行查询操作并将查询到的列车信息封装为Train对象列表返回以便后续进行遍历展示等操作。
List<Train> list = trainService.getByStartEndStation("上海", "广州", "2019-09-01");
for (Train train : list) {
// 遍历获取到的列车信息列表通过调用train对象的toString方法将每条列车信息以字符串形式打印输出
// 1方便查看查询到的符合条件的
System.out.println(train.getEndStation());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}