Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 文件读取和可测试代码_Java_Unit Testing - Fatal编程技术网

Java 文件读取和可测试代码

Java 文件读取和可测试代码,java,unit-testing,Java,Unit Testing,我有一段java代码,它从文件中读取字符串并用字符串创建映射。由于这段代码依赖于一个文件,所以单元测试很笨拙。如何设计这样的片段,使代码可以进行单元测试 我能想到的一种方法是,它可以采用输入流,而不是将文件作为参数。在实际场景中,传递文件输入流,而单元测试传递从字符串创建的输入流。但是,在我看来,这是一个过度的杀戮。有更好的方法吗?在这种情况下,我常常为测试用例创建所需的文件,并在单元测试中使用它们。我为这些文件(测试数据)设置了一个专用文件夹,并设置测试用例以获取适合测试用例的文件 在这种情况

我有一段java代码,它从文件中读取字符串并用字符串创建映射。由于这段代码依赖于一个文件,所以单元测试很笨拙。如何设计这样的片段,使代码可以进行单元测试


我能想到的一种方法是,它可以采用输入流,而不是将文件作为参数。在实际场景中,传递文件输入流,而单元测试传递从字符串创建的输入流。但是,在我看来,这是一个过度的杀戮。有更好的方法吗?

在这种情况下,我常常为测试用例创建所需的文件,并在单元测试中使用它们。我为这些文件(测试数据)设置了一个专用文件夹,并设置测试用例以获取适合测试用例的文件

在这种情况下,我常常为测试用例创建所需的文件,并在单元测试中使用它们。我为这些文件(测试数据)设置了一个专用文件夹,并设置测试用例以获取适合测试用例的文件

如果您对文件所做的一切都是读取它,那么不提供从
InputStream
读取的函数就是设计错误。因此,修改函数以获取
InputStream
,并提供获取
文件的包装器。使用StringInputStream或StringInputStream来测试它是可以的。

如果您对文件所做的一切都是读取它,那么不提供从
InputStream读取的函数是一个设计错误。因此,修改函数以获取
InputStream
,并提供获取
文件的包装器。使用或StringInputStream来测试它是可以的。

我建议使用专用于测试的数据集(在本例中是文件)。否则,我将使用mocking来模拟对外部资源的访问。
在任何情况下,我都倾向于尽可能扩展自动测试的覆盖范围。

我建议使用专用于测试的数据集(在本例中为文件)。否则,我将使用mocking来模拟对外部资源的访问。
在任何情况下,我都倾向于尽可能扩展自动测试的覆盖范围。

这样看:无论您如何重新组织代码,测试数据都必须来自某个文件。我看到两种变体:

  • 数据在一个.java单元测试源代码文件中进行了适当编码。它只适用于小的测试数据集。正如您所描述的,您需要重构代码以获取输入流,并使用另一个与文件一起工作的包装器

  • 测试数据文件。你必须创建一个 项目范围的约定在何处保存测试 数据文件。他们的位置可能是 相对于jave项目 位置,或在普通测试下 数据文件根目录。不管怎样,这都有帮助 有一个实用的方法 返回给定“逻辑”文件名的完整测试数据文件路径

  • 在你的情况下(一个测试,一百个单词)第一个解决方案似乎就足够了。是的,您需要稍微重构代码。第二种解决方案更通用,我个人认为它更实用、更适用


    有些人会说,如果它可以处理数据文件,那么这不是一个单元测试。好吧,这是一个关于“单元测试”定义的问题,它与此无关。如果您需要测试代码,只需为您的项目找到最佳/最方便的方法。

    这样看:无论您如何重新组织代码,测试数据都必须来自某个文件。我看到两种变体:

  • 数据在一个.java单元测试源代码文件中进行了适当编码。它只适用于小的测试数据集。正如您所描述的,您需要重构代码以获取输入流,并使用另一个与文件一起工作的包装器

  • 测试数据文件。你必须创建一个 项目范围的约定在何处保存测试 数据文件。他们的位置可能是 相对于jave项目 位置,或在普通测试下 数据文件根目录。不管怎样,这都有帮助 有一个实用的方法 返回给定“逻辑”文件名的完整测试数据文件路径

  • 在你的情况下(一个测试,一百个单词)第一个解决方案似乎就足够了。是的,您需要稍微重构代码。第二种解决方案更通用,我个人认为它更实用、更适用


    有些人会说,如果它可以处理数据文件,那么这不是一个单元测试。好吧,这是一个关于“单元测试”定义的问题,它与此无关。如果您需要测试代码,只需为您的项目找到最佳/最方便的方法。

    3个重要问题:您的测试数据文件有多大?编写一个好的测试用例需要多少不同的测试数据文件?你能轻松地动态生成测试数据吗,还是需要我手动准备。测试数据文件不大。包含大约100个单词。2.只有一个文件足够我测试。3.是的,数据必须手动准备,不能动态生成。3个重要问题:您的测试数据文件有多大?编写一个好的测试用例需要多少不同的测试数据文件?你能轻松地动态生成测试数据吗,还是需要我手动准备。测试数据文件不大。包含大约100个单词。2.只有一个文件足够我测试。3.是的,数据必须手动准备,不能动态生成。是的,我也会创建单独的测试资源文件供我的测试使用。是的,我也会创建单独的测试资源文件供我的测试使用。