因此,我尝试运行一个单元测试,其中仅一个正确的解决方案通过,而其他所有不正确的解决方案都将失败。但是,问题是单元测试必须考虑各种各样的测试案例,甚至是负值。在只有一种解决方案通过而其他每种都失败的情况下,我该怎么办呢?我听说人们通过使用哈希表来高效地执行此操作,在哈希表中,输入是键,而输出是值。
我在下面所做的事情显然不足以进行单元测试,并且被标记为错误。
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
答案 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
。然后,此断言表示一个有用的测试,而断言的事实向您表明您的函数存在错误。