进行unittest单元测试,修改未通过函数,测试结果不发生变化

新手上路,请多包涵

跪求各位大神帮忙看看,本人新手一枚,正在学习《Python编程从入门到实践》这本书。
使用的环境是vscode 2019 +anaconda3+jupyter notebook扩展,Python版本是3.9.7。
我使用jupyter notebook来复写书中的代码并做笔记。


以下是碰到的问题:
在学到此书《11章-函数测试》的时候,在11.1.3节,有函数get_formatted_name()如下:

#11.1.3节函数,存入name_function.py
def get_formatted_name(first,middle,last):
    """生成整洁的姓名"""
    full_name = f"{first} {middle} {last}"
    return full_name.title()

然后导入unittest模块进行单元测试:

#测试代码
import unittest
from name_function import get_formatted_name
 
class NamesTestCase(unittest.TestCase):
    """测试get_function_name"""
 
    def test_first_last_name(self): 
        """能够正确地处理像Janis Joplin这样的姓名吗?"""
        formatted_name = get_formatted_name("janis","joplin")
        self.assertEqual(formatted_name,"Janis Joplin")
 
if __name__ == "__main__": 
    unittest.main(argv=['first-arg-is-ignored'], exit=False)

测试未通过,说少了一个{last}位置实参。测试结果正确。
于是修复了该函数,如下:

#11.1.4测试函数,更新到name_function.py
def get_formatted_name(first,last,middle=""):
    """生成整洁的姓名"""
    if middle:
        full_name = f"{first} {middle} {last}"
    else:
        full_name = f"{first} {last}"
    return full_name.title()

再次运行测试,仍显示测试未通过,说少一个{last}位置实参。测试结果错误!
我分明已经修复了函数!!


做出的尝试:
1 我将单元测试的代码复制到独立的Python下,重新执行测试。测试通过!测试结果正确
2 我将vscode关闭,再重新打开,进行测试,测试通过!测试结果正确
3 我再将函数恢复到11.1.13节中的函数,保存,再测试仍通过!测试结果错误
4 我将vscode关闭,再重新打开,进行11.1.13中的测试,测试未通过!测试结果正确


于是,我发现:
在jupyter notebook中进行的unittest测试,
假如函数本身可以通过测试,并进行了一轮测试,测试结果显示通过,那么
如果修改了函数,再进行测试必须要重启vscode,否则无论怎么改(即便本身就不能通过测试了),函数测试都是通过!

同理:
假如函数本身就不能通过测试,并进行了一轮测试,测试结果为不通过,那么
如果修改了函数,再进行测试必须要重启vscode,否则无论怎么改,(即便本身可以通过测试)函数测试都是未通过,连未通过的原因都是相同的!


这到底是怎么造成的?有什么逻辑在里面?跪求大神解答!

阅读 1.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题