2017-09-20 5 views
-1

私は仕事中にここでいくつかのコードの単体テストを作成しようとしています。同じクラスから作成された2つのオブジェクトisinstance = False

コードはオブジェクトを取り込み、そのオブジェクト内の情報に基づいて特定のモジュールをインポートし、そのインスタンスを作成します。

書き込みしようとしているテストでオブジェクトが作成され、それがインポートすると予想されるクラスのインスタンスであることを確認します。問題はisinstanceチェックが失敗していることです。

私のテストは次のようになります。それは、APIだけで()SomeApiのように見える何かを返している可能性があり、したがって、最初の :

import importlib 
from path.to.imported_api import SomeApi 

api = importlib.import_module("path.to.imported_api").create_instance() # create_instance() is a function that returns SomeApi(). 

assert isinstance(api, SomeApi) # This returns false, but I am not sure why. 
+0

ユニットテストを書いているとします。あなたは何かを嘲笑しましたか? – user2357112

+0

'create_instance'が何を返すか分からずに何かを返すことができます。おそらく、 'type(api)'と 'type(api)is SomeApi'を含める必要があります。 'importlib'を使用してモジュールを2回インポートすることもできます。その場合は同じクラスになる可能性がありますが、リロードのために同一とはみなされません。 – MSeifert

+0

-1実際に何かを再現するにはあまりにもコードサンプルがダウンしています。上の 'from path.to.imported_api import SomeApi'があるので、動的importlib行は何もしません。単に' sys.modules'にある既存のモジュールを使うだけです。 – wim

答えて

-2

はそれを引き起こす可能性がいくつかあります。また、SomeApiがisinstanceの動作を上書きしていることも考えられます。

関連する問題