问题在于函数调用。
self.assertEqual(True, Calculator.is_peak('9:40'))
应该是这样的:
self.assertEqual(True, Calculator().is_peak('9:40'))
你的单元测试代码应该是这样的:
class TestCalculator(unittest.TestCase):
def test_peak(self):
# testCase 1 (User enters a valid time in the peak hour)
self.assertEqual(True, Calculator().is_peak('9:40'))
# # testCase 2 (User enters a valid time in the off-peak hour)
self.assertEqual(True, Calculator().is_peak('20:30'))
说明:
为什么我们应该使用Calculator() 而不是Calculator?
如果我们想要访问一个类的全部功能,我们必须使用Calculator() 创建一个类的对象。
当像这样Calculator.is_peak() 进行函数调用时,它会将self 作为参数,但是当我们像这样调用Calculator().is_peak() 时,它会将self 作为类默认参数。
我们可以从下面提到的 sn-ps 中看到 class 的不同行为。
print(dir(Calculator.is_peak))
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
print(dir(Calculator().is_peak))
['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__func__', '__ge__', '__get__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']