2016-08-27 2 views
0

私はpythonでunittestを使ってプロジェクトをテストしています。このプロジェクトでは、他のPython開発者がサブクラス化するためのクラスを定義しています。プロジェクトを実行し、ユーザーが作成したサブクラスを利用できます。Pythonクラスメソッド内のテスト

サブクラスのメソッドがプロジェクトによって正しいデータを渡していることをテストしたいと思います。これどうやってするの?プロジェクトからサブクラス化するテストクラス内からunittest.TestCase.assert*メソッドを呼び出すのは簡単ではありません。

TestCaseオブジェクトをグローバル変数に設定し、TestCaseオブジェクトのアサートメソッドをサブクラスメソッドから呼び出そうとしましたが、グローバル変数がテストクラスメソッドのスコープ内で定義されていないようです。

import unittest 
import myproject 


class TestProjectClass(unittest.TestCase): 
    def test_within_class_method(self): 
     myproject.run(config_file_pointing_to_ProjectClass)  # Calls SomeUsersClass.project_method() 


class SomeUsersClass(myproject.UserClassTemplate): 
    def project_method(self, data_passed_by_project): 
     #want to test data_passed_by_project in here 
     pass 
+0

どのようにテストを実行しますか?どんなテストランナークラスを使用していますか? – XORcist

+0

テストはPyCharmの「tedting.pyのユニット実行テスト」によって実行されていますが、テストの実行方法ははっきりしていません。 – Shaun

+0

質問は不明ですか?私はより多くの答えを期待していただろう。 – Shaun

答えて

0

私はunittest.TestCaseにカスタム例外を渡すためにraiseを使用してこの作業を取得することができました。カスタム例外は、テストする必要があるデータであればどれでもパックできます。私はここにそれを示していませんが、test_helper.pyは素人骨のサブクラスでExceptionです。

ユーザーのクラス内で作成された例外のインスタンスは、カスタム例外のインスタンスとして識別されていなかったので、働いていませんでした同じファイル内でカスタム例外を定義するいくつかの理由
import unittest 
import myproject 
from test_helper import PassItUpForTesting 


class TestProjectClass(unittest.TestCase): 
    def test_within_class_method(self): 
     try: 
      # The following line calls SomeUsersClass.project_method() 
      myproject.run(config_file_pointing_to_ProjectClass) 
     except PassItUpForTesting as e: 
      # Test things using e.args[0] here 
      # Example test 
      self.assertEqual(e.args[0].some_attribute_of_the_data, 
          e.args[0].some_other_attribute_of_the_data) 


class SomeUsersClass(myproject.UserClassTemplate): 
    def project_method(self, data_passed_by_project): 
     #want to test data_passed_by_project in here 
     raise PassItUpForTesting(data_passed_by_project) 

(、。の検査sys.exc_*を経由して例外が発生していることが判明しましたので、例外タイプが別のものから出てきたので、別のモジュールに例外を置き、インポートして機能させました)

関連する問題