A Disabled Test In Lieu of a Bug Report

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

当你在使用一个开源库时发现一个bug,你会怎么做?你会提交一个GitHub问题(或者其他他们使用的问题追踪系统)。在问题中,你会尽可能描述问题,并最好提供一个可以在本地运行以重现bug的工作代码示例。如果你没有提供可执行的代码片段,他们很可能会要求你这样做,除非这个bug很简单。我建议简化工作流程并直接在拉取请求中提供他们想要的:以一个禁用的单元测试的形式发送给他们这个bug。

假设有一个 Rust 库,它提供了一个 fibo() 函数来计算斐波那契数列(Fibonacci number)。你可以按照以下方式使用该函数:

let n = 23;
let x = fibo(n);
println!("The {n}th Fibonacci is {x}");

你运行它,它打印出了17711,这个数值错误地表示为第22个斐波那契数,而不是第23个。这绝对是一个bug。你提交了一个工单,大致说明了这样的情况:

I'm trying to use your library to calculate 
a Fibonacci  number, but for some reason, I'm 
getting a wrong result:  the 23rd number your 
library returns is 17711, while I'm expecting 
the number 28657. Please check and fix.

他们会回复“你能证明一下吗?请展示给我们看代码!”而你很可能会将这段代码添加到工单中。

let x = fibo(23);
assert_eq!(28657, x);

然后,如果他们是纪律严明的程序员,将会创建一个新的单元测试并修复fibo()函数。此外,如果他们是非常纪律严明的程序员,他们将在一个独立的拉取请求中提交该测试,并将其禁用。然后,在第二个拉取请求中,他们将进行修复。

为什么你不能帮助他们并跳过问题提交步骤呢?只需自己创建第一个拉取请求,其中包含禁用测试和添加的“谜题”。

```rust // @todo #42 This test is disabled because the // fibo() function doesn’t work correctly // with this particular number, it returns // 17711 instead of 28657. Let’s fix it.

[test]

[ignore]

fn calculates23rdfibonaccinumber() { let x = fibo(23); asserteq!(28657, x); } ```

这样的PR既充当错误报告(一旦PR合并,这就是谜题文本将转化的内容),也作为重现问题的测试。这将受到仓库维护团队的欢迎。这种PR可以节省他们创建单元测试的时间。此外,它还可以节省您创建错误报告的时间,因为谜题发现工具会自动创建它。

顺便提一下,本博客文章是基于jcabi/jcabi-xml库中的这个拉取请求而产生的,该库中特意添加了一个禁用的单元测试来复现该 bug。除了这个测试,还添加了一个谜题,导致了一个新的问题,一个新的拉取请求,最后发布了一个新版本的库。

Translated by ChatGPT gpt-3.5-turbo/35 on 2023-09-08 at 16:13

sixnines availability badge   GitHub stars