メソッドのテストを作成していますが、メソッドが特定の型を返すことを検証したいと思います。ただし、これを試してみるとエラーが発生します。
def search_emails(mail):
data = mail.uid('search')
raw_email = data[0][1]
return raw_email
タイプ(raw_email)は次のとおりです。<class 'bytes'>
このテストを実行すると:
def test_search_emails_returns_bytes():
result = email_handler.search_emails(mail)
assert type(result) == "<class 'bytes'>"
このエラーが発生します。テストに合格するようにアサーションを指定するにはどうすればよいですか?それとも、テストを書くためのより良い方法はありますか?
E assert <class 'bytes'> == "<class 'bytes'>"
is
演算子を使用して、変数が特定のタイプであることを確認できます
my_var = 'hello world'
assert type(my_var) is str
何かが特にクラスのものであることを確認したい場合、isinstanceは行いません。これは、それが派生クラスであっても、チェックしたいクラスではなく、Trueを返すためです。次のような文字列としてタイプを取得できます。
def decide_type(raw_prop):
"""Returns the name of a type of an object.
Keep in mind, type(type("a")) is Type,
type(type("a").__name__) is Str
"""
type_as_string = type(first_raw_prop).__name__
return type_as_string
実際には、「lst」、「int」などが返されます。
あなたのコードでは、それは次のようなものに変換されます:
assert type(result).__name__ == "bytes"
型チェック用の組み込み関数であるisinstanceを使用する必要があります
def test_search_emails_returns_bytes():
result = email_handler.search_emails(mail)
assert isinstance(result, bytes)
メソッドを使用していると述べたので、assertIsInstance
が便利な場合があります。
import unittest
def myfunc(name):
return type(name)
class TestSum(unittest.TestCase):
def test_type(self):
result = myfunc('Micheal')
self.assertIsInstance(result, str)
unittest.main()
アサートメソッドのリストについては、下にスクロールしてください ここ :