首页 > 解决方案 > 如何使用pytest在python中测试没有参数或返回的类的方法

问题描述

假设我有一个类,这个类有一些属性和一些方法。此方法没有任何参数或任何返回,它们仅通过使用“self”更改类的属性来工作。财产。如何测试这些类型的方法?

让我们创建虚构类 Foo 作为示例:

class Foo:
     example_value = -1

     def function_1(self,a,b):
        self.attr1 = a
        self.attr2 = b

        self.function_2()
        self.function_3()
        self.function_4(self.example_value)


    def function_2(self):
        self.attr1 = self.attr1 + 50
        self.attr2 = self.attr2 + 40

    def function_3(self):
        self.attr1 = self.attr1 * 2
        self.attr2 = self.attr3 * 3
        self.example_value = self.attr1 + self.attr3

    def function_4(self,value):
        
        if value == -1:
            raise Exception('snippet')   

为了测试这个类,我应该模拟什么?由于其中两个方法没有任何输入参数或返回,我如何跟踪类属性的值变化?我应该只模拟一个方法还是整个类?我怎样才能以简单的方式做到这一点pytest?这段代码可以改变什么?添加一个简单的get_value()会简化这个类的测试开发吗?

标签: pythonunit-testingtestingpytestpytest-mock

解决方案


您可以在调用方法之后验证属性,如下所示:

from unittest import TestCase


class TestFoo(TestCase):

    def test_f1(self):
        x = Foo()
        x.function_1(10, 20)
        self.assertEqual(x.attr1, 120)
        self.assertEqual(x.attr2, 30)
        self.assertEqual(x.attr3, 10)
        self.assertEqual(x.example_value, 130)

    def test_f4(self):
        try:
            Foo().function_4(1)
        except Exception:
            self.fail("function_4() raised Exception unexpectedly!")

    def test_f4_error(self):
        with self.assertRaises(Exception):
            Foo().function_4(-1)

推荐阅读