【问题标题】:Should we contains test statements in code? [closed]我们应该在代码中包含测试语句吗? [关闭]
【发布时间】:2021-01-22 05:18:53
【问题描述】:

我知道这个问题与技术无关,是关于代码风格和标准的。

我刚学了一年编程,很多人告诉我“你应该测试你程序的任何一个部分,而不是全部代码然后测试”。但是他们忘了说我们是否应该在正式时删除测试语句发布了吗?

我听到几个不同的声音:

  1. 它会让你的代码看起来臃肿,所以删除它。
  2. 如果您以后想修改某些内容,则不应将其删除。
  3. 您可以删除它,但如果需要,您必须写一些评论。

一个简单的代码包含这样的测试:(真正的代码不会像它那么简单,示例可能有点糟糕)

void Function(){
    printf("hello,world");
}

int main(){
//  Function();
    return 0;
}

所以我的问题是我们应该删除它吗?结果是这样的:

void Function(){
    printf("hello,world");
}
int main(){
    return 0;
}

【问题讨论】:

  • 测试不应该这样工作。在构建过程中会调用测试并使用实际代码的各个单元(因此称为单元测试)。测试代码通常位于您的实际代码范围之外(例如 maven 项目中的 src/test vs src/main)。您的任何测试代码都不应该驻留在实际代码中。如果你必须注释掉你的测试代码,那就有问题了。
  • 请注意,您可以吃蛋糕也可以吃:Rust programming language 允许您将测试功能放在其实现旁边。编译器足够聪明,只在你运行cargo test时编译测试代码
  • 修改代码来测试它几乎违背了测试的目的。你怎么知道你的测试修改不是解决问题的方法?在现实生活中的编程中,测试是完全独立的实体(文件/文件组)。客户获取生产代码,开发人员使用生产代码+测试代码来验证正确性。
  • 您在编程时会进行非正式测试,而这部分通常不值得保留。然后是作为单独代码编写的正式测试。后者如何使用主要取决于产品和组织的工作流程。在某些情况下,将测试与代码(“TDD”)放在一起是有意义的,在其他情况下,您不允许在生产代码中进行任何测试,在这种情况下,您可能希望将测试作为单独的分支处理版本控制。等等……我认为没有一种通用的方法适合所有产品。
  • 恕我直言,您的示例不足以说明您的实际意思。 // Function(); 也没有测试任何东西(它是一个评论),也不是一个空的main 你的最终代码(测试被删除,但其他所有内容也被删除)。无论如何,“测试”不仅仅是调用一个函数

标签: java python c++ c


【解决方案1】:

当正式发布时,代码库应该已经编写了单元测试,并且每次进行更改时,这些单元测试都应该通过。

测试不应该像你写的那样写,它们应该使用 pytest 等。

【讨论】:

  • 虽然这句话是正确的,但您应该详细说明这一点。在现阶段,这几乎不能算作答案。
  • OP 不会质疑是否编写测试(或者是否需要在发布前通过)。我想说这绝对不是问题的答案。
【解决方案2】:

这不是他们测试代码的意思。

相反,您为代码的每个部分编写单独的测试函数,这些函数可以独立于您的主代码运行。然后使用测试运行程序(pytestunittestnose 是最受欢迎的)运行您的测试。

例如,假设您的主代码具有这样的功能:

def add_numbers(a,b):
   return a+b

你的主要是这样的:

def main():
    x = 4
    y = 5
    z = add_numbers(x,y)
    #print(z)  <-- dont do this

您通常在新文件中创建一个新函数:

def test_add_numbers():
    a=200
    b=343
    res = add_numbers(a,b)
    assert res == 543

然后,测试运行器将运行您的所有测试并在其中任何一个不起作用时输出。

【讨论】:

    猜你喜欢
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 2018-04-23
    • 2020-05-30
    • 1970-01-01
    • 2021-08-08
    相关资源
    最近更新 更多