有沒有現有的測試套件可以用來測試IOBase
的實現?如果可能的話,我想詳盡地測試一個新的實現,但是有很多測試需要手動編寫。例如,假設我有一個不可查找的,不可寫的數據流。我想驗證我的read
的實現是否符合要求,並且所有其他方法都會引發正確的錯誤。這樣的類可能是這樣的:如何驗證python的IOBase的實現?
import io
class NonSeekableReader(io.RawIOBase):
def __init__(self, b=b''):
super(NonSeekableReader, self).__init__()
self._data = io.BytesIO(b)
def seekable(self):
return False
def writable(self):
return False
def readable(self):
return True
def read(self, n=-1):
return self._data.read(n)
也許讀作品我最初預期,但也許也有優勢情況下,我會用更復雜的實現錯過。實驗表明,文檔對於預期的行爲至少是混淆的。
基礎上python docs我可以看到,通過定義writeable
返回False
,write
要引起OSError
(在Python 3.5)。這實際上並非如此,當從RawIOBase
或AttributeError
繼承從IOBase
繼承時它將引發NotImplementedError
。此行爲在seekable
中不重複,即致電.tell()
會產生正確的錯誤。要解決這個問題,我定義write
像這樣:
def write(self, b):
raise io.UnsupportedOperation("write")
值得注意的是,一個文件,打開'r'
產生預期的錯誤類。
由於在鏈接文檔頁面之外沒有實現這些接口的一般指導,我甚至不會想要檢查這個問題。預先存在的測試套件可以解決這個問題。否則,對必要的測試或邊緣案例的描述將引導我圍繞這些問題。
這樣的指導是否存在我根本找不到的地方?
'RawIOBase'和'IOBase'是* *基類。這是你的責任,編寫具體的課程,使他們符合 –
正確的,但我正在尋找更嚴格的指導如何驗證。有一些非顯而易見的邊緣案例和我想避免的mixin潛在問題。 –