我习惯于pytest
进行单元测试,而不使用类。今天我想尝试一下unittest
,我想将我的测试封装在一个TestCase中。
然后考虑这个示例测试类:
import unittest
import moto
import boto3
class TestMyClass(unittest.TestCase):
@classmethod
@moto.mock_ssm
def setUpClass(cls) -> None:
cls.ssm_client = boto3.client('ssm')
cls.ssm_client.put_parameter(Name='test', Value='foo', Type='String')
@moto.mock_ssm
def test_something(self):
value = self.ssm_client.get_parameter(Name='test').get('Parameter').get('Value')
self.assertEqual(value, 'foo')
为什么setUpClass
从测试中看不到放置的参数?我可以想象,通过在@moto.mock_ssm
那里使用装饰器,这一切都将在模拟的上下文中完成。
但是,我可以将参数放在其中test_something
:
@moto.mock_ssm
def test_something(self):
self.ssm_client.put_parameter(Name='test', Value='foo', Type='String')
value = self.ssm_client.get_parameter(Name='test').get('Parameter').get('Value')
self.assertEqual(value, 'foo')
然后它(显然)有效。为什么不使用我的第一种方法?我不想为每个依赖它的测试填充虚假的ssm参数。在这里最好的方法是什么?
我问这个的原因是因为我要测试的类在初始化时需要这个参数。