此代码块看起来非常相似,我正在寻找一种从它们两者中创建一个函数的方法:
guardians = ["guardianPogchamp", "guardianKappa", "guardianKappaPride", "guardianSmorc", "guardianTrihard"]
with pocofixtures.poco.freeze() as frozen_poco:
for guardian in guardians:
if guardian == 'guardianLul':
assert_text_equal(frozen_poco(guardian).offspring("countdown"),"Immune")
else:
assert_text_match(frozen_poco(guardian).offspring("countdown"),"Not Immune")
with pocofixtures.poco.freeze() as frozen_poco:
for guardian in guardians:
if guardian == 'guardianLul':
assert_visible(frozen_poco(guardian).offspring("PetContainer"))
else:
assert_not_visible(frozen_poco(guardian).offspring("PetContainer"))
这是我尝试过的解决方案之一:
def custom_assert(func1, func1Args, func2, func2Args):
guardians = ["guardianPogchamp", "guardianKappa", "guardianKappaPride", "guardianSmorc", "guardianTrihard"]
with pocofixtures.poco.freeze() as frozen_poco:
for guardian in guardians:
if guardian == 'guardianLul':
func1(*func1Args)
else:
func2(*func2Args)
custom_assert(assert_text_equal, (frozen_poco(guardian).offspring("countdown"), "Immune") , assert_text_match, (frozen_poco(guardian).offspring("countdown"),"Not Immune"))
custom_assert(assert_visible, frozen_poco(guardian).offspring("PetContainer"), assert_not_visible, frozen_poco(guardian).offspring("PetContainer"))
但是变量freeze_poco和guardian仅在函数内部定义,而不是在调用时定义,因此代码不会运行。我还尝试对函数内部的变量进行解压缩和重新打包,但这会大大降低运行时间。我知道应该对此有一个优雅的解决方案,但我不知道]
您的回调函数可以将Frozen_poco和监护人,或Frozen_poco(guardian)作为参数:
custom_assert(
lambda fp, g: assert_text_equal(fp(g).offspring("countdown"), "Immune") ,
lambda fp, g: assert_text_match(fp(g).offspring("countdown"),"Not Immune"))
和这样叫:
func1(frozen_poco, guardian)
func2(frozen_poco, guardian)