web-dev-qa-db-ja.com

タイプが指定された値に等しいことを表明する方法

メソッドのテストを作成していますが、メソッドが特定の型を返すことを検証したいと思います。ただし、これを試してみるとエラーが発生します。

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'>"
8
analyticsPierce

is演算子を使用して、変数が特定のタイプであることを確認できます

my_var = 'hello world'
assert type(my_var) is str
9
Zac Crites

何かが特にクラスのものであることを確認したい場合、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"
4
joaquinlpereyra

型チェック用の組み込み関数であるisinstanceを使用する必要があります

def test_search_emails_returns_bytes():  
  result = email_handler.search_emails(mail)
  assert isinstance(result, bytes)
2
Agustin Castro

メソッドを使用していると述べたので、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()

アサートメソッドのリストについては、下にスクロールしてください ここ

0
Ran Feldesh