CodeGym/Java 课程/模块 3/相关项目:测试和日志记录

相关项目:测试和日志记录

可用

这个程序是对跑马场的模仿

首先,与之前的项目一样,从存储库中创建一个分支:https://github.com/CodeGymCC/hippodrome,然后自己克隆这个分支。

您的任务是添加测试和日志记录。

所需测试列表

在下面的列表中,每个项目都必须作为单独的测试方法来实现。在为测试方法起名字时,尽量简洁,但同时,这样你就可以大致了解它们到底在测试什么。例如,比较这两个测试结果:

在第二种情况下,更难理解什么样的测试没有通过,您将不得不查看日志。

1.马类:

  1. 构造器
    • 检查当作为第一个参数传递给构造函数时IllegalArgumentException,将被抛出null。为此,请使用该方法assertThrows
    • 检查当作为第一个参数传递给构造函数时null,抛出的异常将包含消息“Name cannot be null.”。为此,您需要从捕获的异常中获取消息并使用assertEquals;
    • 检查当将空字符串或仅包含空白字符(空格、制表符等)的字符串作为第一个参数传递给构造函数时,. 将被抛出IllegalArgumentException。要使用不同的空白字符变体进行测试,您需要使测试参数化;
    • 检查当将空字符串或仅包含空白字符(空格、制表符等)的字符串作为第一个参数传递给构造函数时,抛出的异常将包含消息“Name cannot be blank.”;
    • 检查当一个负数作为第二个参数传递给构造函数时,IllegalArgumentException;
    • 检查当一个负数作为第二个参数传递给构造函数时,抛出的异常将包含消息“Speed cannot be negative.”;
    • 检查当一个负数作为第三个参数传递给构造函数时,IllegalArgumentException;
    • 检查当将负数作为第三个参数传递给构造函数时,抛出的异常将包含消息“Distance cannot be negative.”;
  2. 获取名称方法
    • 检查该方法是否返回作为第一个参数传递给构造函数的字符串;
  3. 获取速度方法
    • 检查该方法是否返回作为第二个参数传递给构造函数的数字;
  4. 获取距离方法
    • 检查该方法是否返回作为第三个参数传递给构造函数的数字;
    • 如果对象是使用带有两个参数的构造函数创建的,则检查该方法是否返回零;
  5. 移动方法
    • 检查该方法是否使用参数 0.2 和 0.9 在方法内部调用getRandomDouble。为此,您需要使用MockedStatic它的方法verify
    • 检查该方法是否分配了通过以下公式计算的距离值:distance + speed * getRandomDouble(0.2, 0.9)。为此,您需要锁定它,getRandomDouble以便它返回您需要通过参数化测试设置的某些值。

2.竞技场类:

  1. 构造器
    • 检查当传递给构造函数时IllegalArgumentException,将被抛出null
    • 检查当传递给构造函数时null,抛出的异常将包含消息“Horses cannot be null.”;
    • 检查将空列表传递给构造函数时,将抛出IllegalArgumentException;
    • 检查将空列表传递给构造函数时,抛出的异常将包含消息“Horses cannot be empty.”;
  2. getHorses 方法
    • 检查该方法是否返回一个列表,该列表包含与传递给构造函数的列表相同的对象并且顺序相同。创建Hippodrome对象时,将 30 匹不同马的列表传递给构造函数;
  3. 移动方法
    • 检查该方法是否在所有马匹上调用了 move 方法。创建 Hippodrome 对象时,将 50 匹模拟马的列表传递给构造函数并使用verify.
  4. 获得赢家方法
    • 检查该方法是否返回具有最大距离值的马。

3.主类

  1. 主要方法
    • 检查该方法的执行时间是否不超过 22 秒。为此,请使用超时注释。编写此测试后,将其禁用(使用 Disabled 注释)。因此运行所有测试不会花费时间,如果需要,可以手动运行。

需要记录什么

1.主类:

  1. 创建赛马场对象后,将如下条目添加到日志中:2022-05-31 17:05:26,152 INFO Main: Start of the race. Number of participants: 7
  2. 显示有关获胜者的信息后,将如下条目添加到日志中:2022-05-31 17:05:46,963 INFO Main: End of the race. Winner: Cherry

竞技场类:

  1. 如果将 null 传递给构造函数,则在抛出异常之前,在日志中添加如下条目:2022-05-31 17:29:30,029 ERROR Hippodrome: Horses list is null
  2. b. 如果向构造函数传递了一个空列表,则在抛出异常之前,向日志中添加如下条目:2022-05-31 17:30:41,074 ERROR Hippodrome: Horses list is empty
  3. 在构造函数的末尾,将这样的条目添加到日志中:2022-05-31 17:05:26,152 DEBUG Hippodrome: Created a Hippodrome with [7] horses

3.马类:

  1. 如果将 null 而不是名称传递给构造函数,则在抛出异常之前,在日志中添加一个条目,例如:2022-05-31 17:34:59,483 ERROR Horse: Name is null
  2. 如果传递给构造函数的名称为空,则在抛出异常之前,在日志中添加如下条目:2022-05-31 17:36:44,196 ERROR Horse: Name is blank
  3. 如果传递给构造函数的速度小于零,则在抛出异常之前,在日志中添加如下条目:2022-05-31 17:40:27,267 ERROR Horse: Speed is negative
  4. 如果传递给构造函数的距离小于零,则在抛出异常之前,在日志中添加如下条目:2022-05-31 17:41:21,938 ERROR Horse: Distance is negative
  5. 在构造函数的末尾,将这样的条目添加到日志中:2022-05-31 17:15:25,842 DEBUG Horse: Created a Horse named [Lobster] with speed [2.8]

日志应写入hippodrome.log文件,该文件应位于项目根目录的日志文件夹中。每天都应根据hippodrome.2021-12-31.log模式重命名该文件,并创建一个新的hippodrome.log。为此,请使用RollingFile appender 。在这种情况下,应该删除超过 7 天的文件。为此,您可以使用如下结构:

<DefaultRolloverStrategy>
    <Delete>
        <IfFileName/>
        <IfLastModified/>
    </Delete>
</DefaultRolloverStrategy>

用谷歌搜索代替三个点的内容。😊


项目分析完成后观看!

评论
  • 受欢迎
你必须先登录才能发表评论
此页面还没有任何评论