我正在尝试为一组共享的测试制作一个mixin。我希望每当我想要运行那些通用测试时,都能从mixin继承。
以下是我的一些混音:
class CommonRuleWhenTestsMixin(TestCase):
def test_returns_false_if_rule_inactive(self):
self.rule.active = False
assert not self.rule.when(self.sim)
这是我使用mixin的时候:
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'
我的mixin如何访问子类的self
上设置的变量?
答案 0 :(得分:3)
你的混音来自this.defensesInRangeArcher = 0;
for (var i = 0; i < buildArcherX.length; i++) {
for (var i = 0; i < buildArcherY.length; i++) {
if (Math.sqrt(Math.pow(buildArcherX[i] - this.x, 2) + Math.pow(buildArcherY[i] - this.y, 2)) <= arch.radius + 7) {
this.defensesInRangeArcher += 1;
if (!v.singleAimArcher && !this.dead) {
this.attackByArcher = true;
v.singleAimArcher = true;
}
} else {
this.attackByArcher = false;
v.singleAimArcher = false;
}
}
}
,所以它的测试被pytest选中(也可能被unittest.TestCase
拾取)。
相反,不要从任何内容(或来自Python上的unittest
)继承你的mixin,并让你的object
类继承TestWhen
和{{1} }。