与unittest.skipif()有关的问题

时间:2019-05-24 16:50:41

标签: python-2.7

我正在使用单元测试框架在类中运行一些测试。我也有一个名为connected_emulators的辅助函数。 如果情况为True,我想跳过test_get_emulator_device。

我的问题是运行测试时出现此消息:

def connected_emulators(self):
    try:
        subprocess.check_output(['adb', '-e', 'get-serialno'])
    except subprocess.CalledProcessError:
        return False
    return True
@unittest.skipIf(not(self.connected_emulators()), 'Expected failure, no 
emulators connected')  
def test_get_emulator_device(self):
    device = get_emulator_device()
    self.assertIsInstance(device, AndroidDevice)

输出:     @ unittest.skipIf(not(self.connected_emulators()),“预期失败,未连接任何仿真器”)NameError:未定义名称“ self”

1 个答案:

答案 0 :(得分:1)

在加载模块时评估@unittest.skipIf装饰器的参数,因为在定义方法时(在模块加载时)将应用装饰器。在那时,您的测试类没有实例,因此“自我”没有任何意义。 “自我”仅在类方法中 有意义。

您应该只将connected_emulators方法作为函数在全局范围内移出,以便可以在不需要测试类实例的情况下调用它。基于您发布的代码,我看不出为什么它必须是您的类的一种方法。

def connected_emulators():
    try:
        subprocess.check_output(['adb', '-e', 'get-serialno'])
    except subprocess.CalledProcessError:
        return False
    return True

class MyTestClass:
    @unittest.skipIf(not(connected_emulators()), 'Expected failure, no emulators connected')  
    def test_get_emulator_device(self):
        device = get_emulator_device()
        self.assertIsInstance(device, AndroidDevice)