Python 如何在另一个方法中断言属性

Python 如何在另一个方法中断言属性,python,decorator,patch,assert,Python,Decorator,Patch,Assert,编辑*看来我是在用一些无心的话误导人们。我原以为实例化到方法的所有函数都包含属性。但我真的只是想测试class2函数中的变量 我对python和unittesting非常陌生,所以如果我的问题完全是妄想,请原谅我 我想知道是否“可以从outter范围在另一个函数中断言变量”。我不断得到以下错误: Cannot modify Class2.py Class1.py from Class2.py import Class2 Class1(unittest.TestCase) def tes

编辑*看来我是在用一些无心的话误导人们。我原以为实例化到方法的所有函数都包含属性。但我真的只是想测试class2函数中的变量

我对python和unittesting非常陌生,所以如果我的问题完全是妄想,请原谅我

我想知道是否“可以从outter范围在另一个函数中断言变量”。我不断得到以下错误:

Cannot modify Class2.py
Class1.py

from Class2.py import Class2
Class1(unittest.TestCase)
    def test_class2_fun(self):
        driver = Class2()
        driver.class2_fun

        assertTrue(driver.class2_fun.class2_variable) "???
Class2(self)
    def class2_fun(self):
        class2_variable = TRUE
Class2.py

from Class2.py import Class2
Class1(unittest.TestCase)
    def test_class2_fun(self):
        driver = Class2()
        driver.class2_fun

        assertTrue(driver.class2_fun.class2_variable) "???
Class2(self)
    def class2_fun(self):
        class2_variable = TRUE

不知道如何用正确的语法进行。在我为驱动程序分配
Class2()
之前,是否可以通过一个装饰程序,或者通过某种方式的修补程序?

类和函数定义中有一些输入错误,但是如果您想使用函数,它会告诉您对象是否具有特定属性

如果您想做的是检查类
Class2
的函数
\uuuu init\uuuu
之外是否存在
局部变量,我认为如果不修改文件
Class2.py
的内容,这是不可能的

工作示例 在Class1.py中

import unittest
from Class2 import Class2

class Class1(unittest.TestCase):

    def test_class2_at_exists(self):
        driver = Class2()
        self.assertTrue( hasattr( driver, 'class2_attribute' ) )

    def test_class2_at_value(self):
        driver = Class2()
        self.assertTrue( driver.class2_attribute == 'attribute value' )


if __name__ == '__main__':
    unittest.main()
class Class2(object):
    def __init__(self):
        self.class2_attribute = 'attribute value'
        local_variable = True
在Class2.py中

import unittest
from Class2 import Class2

class Class1(unittest.TestCase):

    def test_class2_at_exists(self):
        driver = Class2()
        self.assertTrue( hasattr( driver, 'class2_attribute' ) )

    def test_class2_at_value(self):
        driver = Class2()
        self.assertTrue( driver.class2_attribute == 'attribute value' )


if __name__ == '__main__':
    unittest.main()
class Class2(object):
    def __init__(self):
        self.class2_attribute = 'attribute value'
        local_variable = True
在ipython提示符下

>>> run Class1.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK

在类和函数定义中有一些输入错误,但是如果您想使用函数,它会告诉您对象是否具有特定属性

如果您想做的是检查类
Class2
的函数
\uuuu init\uuuu
之外是否存在
局部变量,我认为如果不修改文件
Class2.py
的内容,这是不可能的

工作示例 在Class1.py中

import unittest
from Class2 import Class2

class Class1(unittest.TestCase):

    def test_class2_at_exists(self):
        driver = Class2()
        self.assertTrue( hasattr( driver, 'class2_attribute' ) )

    def test_class2_at_value(self):
        driver = Class2()
        self.assertTrue( driver.class2_attribute == 'attribute value' )


if __name__ == '__main__':
    unittest.main()
class Class2(object):
    def __init__(self):
        self.class2_attribute = 'attribute value'
        local_variable = True
在Class2.py中

import unittest
from Class2 import Class2

class Class1(unittest.TestCase):

    def test_class2_at_exists(self):
        driver = Class2()
        self.assertTrue( hasattr( driver, 'class2_attribute' ) )

    def test_class2_at_value(self):
        driver = Class2()
        self.assertTrue( driver.class2_attribute == 'attribute value' )


if __name__ == '__main__':
    unittest.main()
class Class2(object):
    def __init__(self):
        self.class2_attribute = 'attribute value'
        local_variable = True
在ipython提示符下

>>> run Class1.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK

在类和函数定义中有一些输入错误,但是如果您想使用函数,它会告诉您对象是否具有特定属性

如果您想做的是检查类
Class2
的函数
\uuuu init\uuuu
之外是否存在
局部变量,我认为如果不修改文件
Class2.py
的内容,这是不可能的

工作示例 在Class1.py中

import unittest
from Class2 import Class2

class Class1(unittest.TestCase):

    def test_class2_at_exists(self):
        driver = Class2()
        self.assertTrue( hasattr( driver, 'class2_attribute' ) )

    def test_class2_at_value(self):
        driver = Class2()
        self.assertTrue( driver.class2_attribute == 'attribute value' )


if __name__ == '__main__':
    unittest.main()
class Class2(object):
    def __init__(self):
        self.class2_attribute = 'attribute value'
        local_variable = True
在Class2.py中

import unittest
from Class2 import Class2

class Class1(unittest.TestCase):

    def test_class2_at_exists(self):
        driver = Class2()
        self.assertTrue( hasattr( driver, 'class2_attribute' ) )

    def test_class2_at_value(self):
        driver = Class2()
        self.assertTrue( driver.class2_attribute == 'attribute value' )


if __name__ == '__main__':
    unittest.main()
class Class2(object):
    def __init__(self):
        self.class2_attribute = 'attribute value'
        local_variable = True
在ipython提示符下

>>> run Class1.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK

在类和函数定义中有一些输入错误,但是如果您想使用函数,它会告诉您对象是否具有特定属性

如果您想做的是检查类
Class2
的函数
\uuuu init\uuuu
之外是否存在
局部变量,我认为如果不修改文件
Class2.py
的内容,这是不可能的

工作示例 在Class1.py中

import unittest
from Class2 import Class2

class Class1(unittest.TestCase):

    def test_class2_at_exists(self):
        driver = Class2()
        self.assertTrue( hasattr( driver, 'class2_attribute' ) )

    def test_class2_at_value(self):
        driver = Class2()
        self.assertTrue( driver.class2_attribute == 'attribute value' )


if __name__ == '__main__':
    unittest.main()
class Class2(object):
    def __init__(self):
        self.class2_attribute = 'attribute value'
        local_variable = True
在Class2.py中

import unittest
from Class2 import Class2

class Class1(unittest.TestCase):

    def test_class2_at_exists(self):
        driver = Class2()
        self.assertTrue( hasattr( driver, 'class2_attribute' ) )

    def test_class2_at_value(self):
        driver = Class2()
        self.assertTrue( driver.class2_attribute == 'attribute value' )


if __name__ == '__main__':
    unittest.main()
class Class2(object):
    def __init__(self):
        self.class2_attribute = 'attribute value'
        local_variable = True
在ipython提示符下

>>> run Class1.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK

您的断言应该是

   assertTrue(driver.class2_attribute)

您的断言应该是

   assertTrue(driver.class2_attribute)

您的断言应该是

   assertTrue(driver.class2_attribute)

您的断言应该是

   assertTrue(driver.class2_attribute)


为什么在测试
Class2
时要测试
Class1
功能?如果<代码> Class 1是有问题的,那么您应该考虑使用<代码> UNITTest.MOCK < /代码>。<代码> Class 2Atgult不是一个类属性。它不是任何事物的属性;这是一个局部变量。每次运行
class2\u fun
时,都会创建一个单独的
class2\u属性
,当函数未运行时,变量不存在。上述情况属实。我以为你指的是一个实际属性,只是有一个拼写错误。如果您所说的
class2\u属性
是指您的代码所说的内容,即它是一个局部变量,那么您将无法在其定义的函数之外检查它。我正在尝试为“变量”断言!所以我想测试的是不可能的?即使使用补丁装饰程序-如果可能的话,也会有一些断言的副作用?我更新了我的答案,以反映您想要做的事情实际上是不可能的。为什么您要在测试
Class2
时测试
Class1
功能?如果<代码> Class 1是有问题的,那么您应该考虑使用<代码> UNITTest.MOCK < /代码>。<代码> Class 2Atgult不是一个类属性。它不是任何事物的属性;这是一个局部变量。每次运行
class2\u fun
时,都会创建一个单独的
class2\u属性
,当函数未运行时,变量不存在。上述情况属实。我以为你指的是一个实际属性,只是有一个拼写错误。如果您所说的
class2\u属性
是指您的代码所说的内容,即它是一个局部变量,那么您将无法在其定义的函数之外检查它。我正在尝试为“变量”断言!所以我想测试的是不可能的?即使使用补丁装饰程序-如果可能的话,也会有一些断言的副作用?我更新了我的答案,以反映您想要做的事情实际上是不可能的。为什么您要在测试
Class2
时测试
Class1
功能?如果<代码> Class 1是有问题的,那么您应该考虑使用<代码> UNITTest.MOCK < /代码>。<代码> Class 2Atgult不是一个类属性。它不是任何事物的属性;这是一个局部变量。每次运行
class2\u fun
时,都会创建一个单独的
class2\u属性
,当函数未运行时,变量不存在。上述情况属实。我以为你指的是一个实际属性,只是有一个拼写错误。如果您所说的
class2\u属性
是指您的代码所说的内容,即它是一个局部变量,那么您将无法在其定义的函数之外检查它。我正在尝试为“变量”断言!所以我想测试的是不可能的?即使有补丁装饰器——如果可能的话,也会有一些断言的副作用——我会放弃