gpt4 book ai didi

与文件系统中的二进制文件交互的方法的java单元测试

转载 作者:太空宇宙 更新时间:2023-11-04 08:15:32 25 4
gpt4 key购买 nike

我对 Java 编程很陌生,但我会尝试使用正确的术语并尽可能避免误解。

我找到了一些与我的问题非常相似的主题的答案,但我只是看不出它们如何真正适合我的问题,或者也许它们真的不适合。其中一些使用模拟对象,但我不确定这对于我来说是正确的选择。

一般描述

我需要一个对象数组,其中的信息是从随机访问的二进制文件加载的。二进制文件的第一个字节是文件头,它定义了数据如何存储在文件中,基本上表示一些字段的长度,这些字段有助于计算文件中所需数据的位置。

现在我想测试将调用的方法,以将 UnitListElement 对象指定的所需数据加载到 Unit 对象。为此,我只关注对二进制文件的一次读取。

更详细的 View

我有一个名为 Unit 的 java 类,它具有一些属性,例如 a、*b* 和 c。此属性的值通过方法调用 getDataFromBinFile 加载:

public class Unit{
public double[] a;
public double[] b;
public double[] c;

getDataFromBinFile(UnitListElement element){
<here loads the data from the binary file with random access>
}
}

从二进制文件中加载数据的方法,打开二进制文件并访问二进制文件中所需的数据。要读取的所需数据在 UnitListElement 对象中指定:

public class UnitListElement{
public String pathOfFile;
public int beginToReadAt; // info related to where the desired data begins
public int finishReading; // info related to where the desired data ends
}

属性beginToReadAtfinishReading时间引用,与二进制文件的 header 一起用于计算从二进制文件读取的第一个和最后一个字节位置。

所以我需要做的是一个测试,我调用方法 getDataFromBinFile(unitListEl) 并测试返回的信息是否正确。

解决方案选项

第一个选项

在一些有类似问题的帖子中建议使用模拟对象。我尝试查找有关模拟对象的文档,但没有找到任何简单的初学者指南。因此,虽然不太了解模拟对象,但我的印象是,它不适合这种情况,因为我想测试的是二进制文件的读取,而不仅仅是与其他对象的交互。

第二个选项

另一个选项是使用辅助方法在测试内部创建测试的二进制文件,例如使用@BeforeClass,并使用此临时文件运行测试,然后使用@AfterClass方法将其删除。

问题

您认为考虑 TDD 方法的最佳实践是什么?模拟对象真的适合这种情况吗?如果有的话,是否有任何包含适合初学者的基本示例的文档?

或者另一方面,文件的创建更适合测试读取方法?

谢谢

提前非常感谢。

最佳答案

模拟可以应用于您的情况,但实际上这里并不是严格必要的。您所需要的只是将 getDataFromBinFile 中的实际数据处理逻辑与从文件读取字节的代码分离。

您可以通过(至少)两种方式实现这一目标:

  • 使用模拟:将文件读取代码隐藏在接口(interface)方法后面,该接口(interface)方法采用 UnitListElement 并返回字节数组,然后在 getDataFromBinFile 中使用它。然后,您可以使用模拟读取器在测试中模拟此接口(interface),该读取器仅返回一些预定义的字节而不访问任何文件。 (或者,您可以将文件读取逻辑移至 UnitListElement 本身,目前它似乎是一个 POD 类。)
  • 没有模拟:更改 getDataFromBinFile 的签名以采用字节数组参数而不是 UnitListElement。在实际的生产代码中,您可以从 UnitListElement 描述的文件位置读取数据,然后将其传递给 getDataFromBinFile。在单元测试中,您可以直接将任何二进制数据传递给它。 (请注意,在这种情况下,将方法重命名为 getDataFromBytes 之类的名称是有意义的。)

对于模拟,到目前为止我一直在使用 EasyMock。我找到its documentation比较容易理解,希望有帮助。

关于与文件系统中的二进制文件交互的方法的java单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10495216/

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