如何在Python中成功进行单元测试?

时间:2019-02-12 02:59:35

标签: python unit-testing

因此,我尝试运行一个单元测试,其中仅一个正确的解决方案通过,而其他所有不正确的解决方案都将失败。但是,问题是单元测试必须考虑各种各样的测试案例,甚至是负值。在只有一种解决方案通过而其他每种都失败的情况下,我该怎么办呢?我听说人们通过使用哈希表来高效地执行此操作,在哈希表中,输入是键,而输出是值。

我在下面所做的事情显然不足以进行单元测试,并且被标记为错误。

Unit_Test / lecture / MainObject.py

john.doe@example.com

Unit_Test / tests / Testing.py

def computeShippingCost(input):
    if (0 < input <= 30):
        return 5
    elif (input > 30):
        return ((input - 30) * 0.25) + 5

1 个答案:

答案 0 :(得分:0)

根据您的示例和描述,我认为对于测试的外观可能存在非常根本的误解。每个测试都会以某种方式刺激其主题(被测系统,又称SUT),然后验证结果是否符合预期。

在非常抽象的水平上,测试如下:

def myTest():
    <Prepare the SUT for the test>
    <Stimulate the SUT>
    <check if the result matches the expectation>

目的是,失败的测试将表明SUT中存在错误。正确执行的代码不应导致测试失败。 (*)

在您的代码示例中,您通过以下方式激励了SUT并检查了结果:

assert computeShippingCost(20) == 3 #incorrect

根据computeShippingCost的实现,很明显,这种情况下的结果将是5而不是3。现在有两种可能性:

A)computeShippingCost已正确实施。然后,在这种情况下的期望应该是5。对5以外的任何东西的断言将失败。这违反了上述目标(*),因为尽管正确实现了代码,但测试仍会失败。

B)computeShippingCost有一个错误,在这种情况下,它实际上应该提供3。然后,此断言表示一个有用的测试,而断言的事实向您表明您的函数存在错误。