在Python3中使用单元测试和正常进行测试之间的区别

时间:2020-04-13 08:12:07

标签: python python-3.x unit-testing python-unittest

使用单元测试和普通测试之间实际上有什么区别?

通过normal tests是指,例如,使用if语句确定计算是否等于期望的答案(如果返回的是false),我们可以提高AssertionError

3 个答案:

答案 0 :(得分:2)

我们以一段简单的代码为例:

def square(a):
   return a*a;

旨在单独查找此功能中的错误的测试是单元测试。这与您实际实现它们的方式无关:如果您只写一个if之类的if (square(3) != 9)语句,然后像您所说的那样提出一个AssertionError,那么这就是单元测试。相反,如果您通过调用unittest使用assertEqual实现相同的测试,那么它也是一个单元测试。

换句话说,是否使用(所谓的)单元测试框架并不是测试是否为单元测试的标准。实际上,尽管有框架的名称(Python中为“ unittest”,Java中为“ JUnit”,...),这些框架仍可用于单元测试以及其他测试,例如集成测试。因此,这些框架的名称有点误导人。

关于单元测试和普通测试之间的区别的原始问题就这么多了。在其中的一条评论中,您更清楚地表明您实际上想知道哪种更好:使用或不使用测试框架。而且,答案很明确:绝对要使用测试框架。

仅手动编写了一些测试,即没有测试框架之后,您将看到测试代码中有很多重复项:您将结果与if进行比较-而不是如此不同。但是然后,在成功的情况下,您将使用测试名称编写一些“通过”消息,在失败的情况下,您将使用测试名称再次编写“失败”的消息,在这种情况下,还将包含一些关于实际名称的信息。以及预期的结果是什么。并且-您是否考虑过被测代码异常退出的情况?因此,还必须用try / catch块包装它,以确保意外的异常导致“失败”结果,并再次提供一些有用的诊断信息。

等等...所有这些以及更多内容都由您的测试框架处理。

答案 1 :(得分:0)

从您的问题中,您假设存在两种测试类型:单元测试正常测试。实际上,有很多类型的测试。单元测试就是其中之一。您可以阅读here其他类型的测试。

如果我们假设“正常测试”是“黑盒测试”。它是没有源代码的测试软件。对于单元测试,软件的另一部分将测试源代码本身的完整性。这意味着什么?您编写了一个将两个数字相加的函数。对于单元测试,您正在编写另一个功能来检查您的第一个功能是否有效

# Your Function
def my_sum_function(x,y):
    return(x+y)

# Your Unit Test Function
def test_sum():
    assert my_sum_function([1, 2]) == 3, "Should be 6"

不仅对于Python,而且对于测试背后的所有编程语言逻辑都是相同的。

答案 2 :(得分:0)

用于质量控制。如果您要在自己的库中使用功能f1和其他功能f2(f2使用f1)编写名为“ app1”的应用

没有单元测试: 您可以对功能f1进行更改以对其进行测试,它可以在f2中运行,但是您不会注意到在2周前编写的程序“ app0”中它会导致应用崩溃,因为在旧应用“ app0”中您有一个函数f3和f3也在使用f1。...

使用单元测试: 您可以捕获这种讨厌的错误,因为功能f3的测试将不再通过,并且IDE会告诉您,当您在“ app1”中更改功能f1时

我希望这是有道理的(英语不是我的母语)