gpt4 book ai didi

java - 复杂 Java 模型的 JUnit 测试

转载 作者:行者123 更新时间:2023-12-02 04:58:23 25 4
gpt4 key购买 nike

我想学习/知道如何使用 JUnit 测试复杂的 java 类。

我有一个java项目,我正在从属性文件中读取内容,然后我将文件的内容解析为java对象。属性文件具有树结构,因此我同样实现了 Java 模型的复合模式。 enter image description here

那么,当我想为复合类或项目的任何类编写单元测试时,我应该如何编写这些测试?测试应该是什么样的?它应该看起来像这样吗?

 @Test
public void testComposition()
{
// Create a object of the Composite class, what you expect after reading
// from the file
Composite expectedObject = new Composite();
...

// Call the parser class of the file which returns a composite
Composite createdObject = PropertiesFileParser.parse(file);

// and then i have to assert the 2 object with a method from Assert
// e.g.
assertEqual(createdObject, expectedObject);
}

我是否必须“手动”创建预期的复合对象expectedObject?或者还有其他方法可以做到类似的事情吗?

编写 Junit 测试用例时是否有一些编码约定?

我很感谢每一个有用的答案! (请原谅我的英语)

最佳答案

首先,您应该检查对象的每个单独方法。因此,如果我是你,我会通过调用叶子和复合的单独方法来检查小型模型的一些琐碎情况。例如,我会:

  1. 创建一个组合。
  2. 确保它没有子项。
  3. 确保它优雅地拒绝删除不属于它的子项。
  4. 添加一个 child 。
  5. 确保它有一个子级。
  6. 确保它仍然优雅地拒绝删除不属于它的子项。
  7. 再添加一个 child 。
  8. 确保它有两个 child 。
  9. 确保它优雅地拒绝添加已包含的子项。
  10. 删除第一个子项。
  11. 确保它有一个子级。
  12. 删除第二个 child 。
  13. 确保它没有子项。
  14. 确保它优雅地拒绝删除不再拥有的子项。

然后,您需要编写一些测试来确保对象的 equals() 方法绝对正确工作,因为稍后此方法将被 junit 的 assertEqual( )。所以,如果我是你,我会:

  1. 创建单个对象 A。
  2. 创建 A 的副本作为 B。
  3. 确保 A 等于 B。
  4. 创建 A 的副本作为 C 并对其进行一点点更改。
  5. 确保 A 不等于 C。
  6. 创建 A 的副本作为 D 并对其进行一点点更改。
  7. 确保 A 不等于 D。
  8. 创建 A 的副本作为 E 并对其进行一点点更改。
  9. 确保 A 不等于 E。

...依此类推,直到您确信 Leaf.equals()Composite.equals() 方法中绝对没有任何反应未经测试。

然后,您应该手动测试微小层次结构的基础知识。所以:

  1. 创建一个小型层次结构 A。(只有一个父级和一个子级。)
  2. 创建一个与 A 相同的小型层次结构 B。
  3. 确保 A 等于 B。
  4. 创建一个小型层次结构 X,该层次结构在微小细节上与 A 有所不同。
  5. 确保 A 不等于 X。
  6. 创建一个小型层次结构 Y,它在另一个微小细节上与 A 不同。
  7. 确保 A 不等于 Y。
  8. 创建一个小型层次结构 Z,它在另一个微小细节上与 A 不同。
  9. 确保 A 不等于 Z。

完成上述所有操作后,您就可以访问磁盘了。

点击磁盘是为了确保模型的复杂实例仍然有效。您可以编写一个PropertiesFileWriter来将层次结构写入文件,这样您就可以创建一个对象层次结构,将其写入文件,然后将该文件读入另一个对象层次结构,并比较两个对象层次结构。

关于java - 复杂 Java 模型的 JUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28537169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com