如何使用 pytest 测试没有参数的 class 或 python 中的 returns 的方法
How to test methods of an class that don't have parameters or returns in python using pytest
假设我有一个class,这个class有一些属性和一些方法。此方法没有任何参数或任何 return,它们仅通过使用 'self.' 属性 更改 class 的属性来工作。我如何测试这些类型的方法?
让我们创建虚构的 class 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')
为了测试这个 class,我应该模拟什么?由于其中两个方法没有任何输入参数或 returns,我如何跟踪 class 属性的值变化?我应该只模拟一个方法还是整个 class?我怎样才能用 pytest
以简单的方式做到这一点?这段代码可以改变什么?添加一个简单的 get_value()
将简化此 class?
的测试开发
你可以只验证属性,在方法被调用之后,像这样:
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)
假设我有一个class,这个class有一些属性和一些方法。此方法没有任何参数或任何 return,它们仅通过使用 'self.' 属性 更改 class 的属性来工作。我如何测试这些类型的方法?
让我们创建虚构的 class 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')
为了测试这个 class,我应该模拟什么?由于其中两个方法没有任何输入参数或 returns,我如何跟踪 class 属性的值变化?我应该只模拟一个方法还是整个 class?我怎样才能用 pytest
以简单的方式做到这一点?这段代码可以改变什么?添加一个简单的 get_value()
将简化此 class?
你可以只验证属性,在方法被调用之后,像这样:
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)