我正在嘗試對其基類實作 __init_subclass__方法的繼承類進行單元測驗。代碼如下:
quick_test.py
import unittest
from unittest.mock import create_autospec
class Parent():
PROPERTY = NotImplemented
def __init_subclass__(cls, **kwargs):
if cls.PROPERTY is NotImplemented:
raise NotImplementedError("Please implement the `PROPERTY`.")
super().__init_subclass__(**kwargs)
def __init__(self, connection_type="default"):
self.connection_type = connection_type
class Child(Parent):
PROPERTY = "has value"
class ChildNoProp(Parent):
pass
class TestClass(unittest.TestCase):
def test_required_params(self):
mock = create_autospec(Child)
self.assertRaises(NotImplementedError, mock)
if __name__ == '__main__':
unittest.main()
問題是我什至無法到達測驗用例,因為ChildNoProp定義在基類中呼叫__init_subclass__并引發例外。
有沒有辦法可以用當前的實作對其進行單元測驗,或者我應該放棄引發的錯誤__init_subclass__?
uj5u.com熱心網友回復:
您可以在assertRaises塊內創建類。
with self.assertRaises(NotImplementedError):
class ChildNoProp(Parent):
pass
如果class方法內部的宣告讓你不舒服,你可以type直接使用建構式。
with self.assertRaises(NotImplementedError):
type("ChildNoProp", (Parent,), {})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/483178.html
