2016-09-15 1 views
0

私は共有テストセットのためにmixinを作ろうとしています。これらのジェネリックテストを実行したいときはいつでも、ミックスインから継承することができます。ここでPy.test mixinクラスが `self`にアクセスできない

は私のミックスインの一部です:

class TestWhen(CommonRuleWhenTestsMixin): 

     def setUp(self): 
      self.customer = mommy.make(Customer) 
      self.rule = mommy.make(
       UsageRule, 
       customer=self.customer, 
       max_recharges_per_month=2 
      ) 
      self.sim = mommy.make(
       Sim, 
       msisdn='0821234567', 
       customer=self.customer 
      ) 

      assert self.rule.when(self.sim) 

     def test_returns_false_if_airtime_max_recharges_exceeded(self): 
      self.rule.recharge_type = AIRTIME 
      mommy.make(
       SimRechargeHistory, 
       sim=self.sim, 
       product_type=AIRTIME, 
       _quantity=3 
      ) 

      assert not self.rule.when(self.sim) 

私はこのメッセージを得続ける:

_________ CommonRuleWhenTestsMixin.test_returns_false_if_rule_inactive _________                                 
simcontrol/rules/tests/test_models.py:14: in test_returns_false_if_rule_inactive                                 
    self.rule.active = False                                              
E AttributeError: 'CommonRuleWhenTestsMixin' object has no attribute 'rule' 

どのようにミックスインすることができます。ここ

class CommonRuleWhenTestsMixin(TestCase): 

    def test_returns_false_if_rule_inactive(self): 
     self.rule.active = False 

     assert not self.rule.when(self.sim) 

は、私はミックスインを使用する場合であります子クラスによってselfに設定された変数にアクセスしますか?

+0

ここでTestCaseはunittestのものですか? 'setUp'が実行されていますか? –

+0

はい、はい、私は確認する設定でFalseをアサートした – Lee

答えて

3

あなたのmixin inerhitsはunittest.TestCaseからです。そのテストはpytestによって行われます(そして、おそらくunittestで取得されるでしょう)。

代わりに、何でも(やPython 2のobjectから)から、あなたのミックスインを継承し、unittest.TestCaseCommonRuleWhenTestsMixin両方からあなたTestWhenクラスを継承することはありません。

関連する問題