繁体   English   中英

为什么在使用 unittest 测试 class 方法时收到以下 AttributeError:'class' object has no attribute 'testing method'?

[英]Why do I receive the following AttributeError when testing a class method with unittest: 'class' object has no attribute 'testing method'?

为了练习编码,我正在尝试编写一个非常简单的游戏。 尝试对(私有)class 方法运行测试时,我收到以下错误: AttributeError: 'LivingBeing' object has no attribute '_Test_Class_Methods__lose_hp'

更详细:

我在文件 classes.py 中有一个名为“LivingBeing”的 class。

class LivingBeing:

def __init__(self, name, hp=100):
    self.name = name
    self.hp = hp

def __lose_hp(self, number=20, decimal_percentage=1):
    self.hp = self.hp - (21 - number)*decimal_percentage
    return self.hp

现在我想测试所说的 __lose_hp 方法,我用下面的代码试了一下:

import sys, unittest
sys.path.append("/Users/angel/OneDrive/Dokumente/Studium/CL/Programmieren/git_projects/fantasticgame/")

from classes import LivingBeing

class Test_Class_Methods(unittest.TestCase):

    def setUp(self):
        self.livingbeing = LivingBeing("Life")

    def test_lose_hp(self):
        self.assertEqual(self.livingbeing.__lose_hp(20), 99, "Should be 99")

if __name__ == "__main__":
    unittest.main()

到目前为止我尝试了什么:

  • 我查了一些资料说很可能是ImportError,所以我根据类似问题的解决方法尝试了“sys.path.append”-statement。 因此,如果我将其遗漏,我将收到相同的错误消息。 文件“classes.py”和测试文件位于同一个文件夹中。

  • 起初,我没有 setUp 方法,但是它已经为其他人( 即这里)解决了一个有点类似的问题,所以我尝试了它 - 但是对我来说是同样的错误消息。

  • 起初我也没有在 class 方法本身中有 return 语句,对此我非常理解为什么它现在会抛出错误(因为返回值将是 None)。

  • 非常经典的尝试只是重新启动(计算机)并在发布前重试也没有帮助。

  • 有一点我试图制作“Test_Class_Methods”
    继承自 unittest.Testcase 和 LivingBeing,但这
    再次导致同样的错误。

看起来像这样:

class Test_Class_Methods(unittest.TestCase, LivingBeing):

    def setUp(self):
        self.livingbeing = LivingBeing("Life")

    def test_lose_hp(self):
        self.assertEqual(self.livingbeing.__lose_hp(20), 99, "Should be 99")

这是我的第一个问题,我希望它尽可能完整和简洁,我感谢任何有助于解决上述错误的指示。

编辑:我将方法更改为公开而不是私有,并且通过这种更改,它现在可以工作了。 如果我碰巧找到了一个关于如何为私有方法编写测试的好指南,我可能会在此处链接它以供将来寻求答案的人使用。

我知道有点太晚了,但我面临着和你一样的 AttributeError。 从我想测试的 function 的开头删除双下划线对我有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM