java - 在 jUnit 的 assertEquals() 方法中计算 expected_value 的最佳方法是什么

标签 java unit-testing testing junit

我在 jUnit 中使用 assertEquals() 方法来测试某个值是否等于代码生成的实际值。

/*
  calculating the actual_value
*/
int expected_value = 1000; // rows of the set of files, manually calculated
assertEquals(expected_value, actual_value);

我想知道如果我按照下面的方式进行操作,是否会出现标准和手续方面的问题。

/*
  calculating the actual_value
*/
int expected_value = getRelevantLinesOfFiles(set of files); // rows of the set of files
assertEquals(expected_value, actual_value);

因为几乎不可能总是手动找到那种变量,所以我编写了一种方法来读取和计算这些文件中的相关行。

我担心的是我在 assertEquals 测试中使用了一个方法的输出。但是 getRelevantLinesOfFiles() 方法没有经过测试。如果我要测试它,那么我必须再次手动读取文件。所以这是一次又一次的同一件事。

这是一个好习惯吗?或者进行此类测试的最佳方法是什么?

最佳答案

如果这些文件也是计算 actual_value 的输入,那么您正在做的就是测试替代实现与真实实现。这是有效的,但需要预先了解事情,例如,与优化且更复杂的“生产”实现相比,通常使用非常简单且易于审查的测试实现来完成。如果不是这种情况,则说明您做错了什么。

如果文件包含 actual_value 不是从中计算的结果,那么它应该没问题,例如,如果您有输入集和匹配的预期输出集。

此外,请考虑您是否可以至少提炼出一些琐碎的硬编码输入和硬编码预期输出的案例,类似于您的第一个示例,不涉及文件。这可能需要允许您的界面使用不是 File 的抽象来模拟输入,或者能够在实际提供模拟测试数据的测试中注入(inject)替代文件读取机制.

编辑:只是为了提供一个很好的抽象的具体例子,而不是 File 实例(或文件名,或其他)考虑使用 okio并传入一组 Source实例。

实际实现:给定一个 File 实例列表,使用 Okio.source(file) 创建 Source 实例.

测试:通过 Buffer 的列表包含任何你想要的实例

Buffer b = new Buffer();
b.writeUtf8("whatever the hell I want in this file");
// can also write bytes or anything else

int actualValue = getRelevantLinesOfFiles(Arrays.asList(b));

关于java - 在 jUnit 的 assertEquals() 方法中计算 expected_value 的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31923068/

相关文章:

java - 如何扩展 ReceiverAdapter 和 java.rmi.server.UnicastRemoteObject

node.js - Jest/Istanbul 覆盖未加载 require 的模块

python - 如何测试范围的等价性

scala - 如何做非专门类型有接受 Function1 的方法?

java - 以下功能的测试用例

java - 为什么 append 函数在 ActionListener 中不起作用?

java - 如何将160位二进制字符串转换为20字节数组?

java - NetBeans 如何处理 IntelliJ 注释?

Android Kotlin 测试 : Wanted but not invoked, 实际上,与此模拟的交互为零

testing - 使用 Silex 测试框架发送 post 参数