Python 如何在另一个方法中断言属性
编辑*看来我是在用一些无心的话误导人们。我原以为实例化到方法的所有函数都包含属性。但我真的只是想测试class2函数中的变量 我对python和unittesting非常陌生,所以如果我的问题完全是妄想,请原谅我 我想知道是否“可以从outter范围在另一个函数中断言变量”。我不断得到以下错误: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
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属性
是指您的代码所说的内容,即它是一个局部变量,那么您将无法在其定义的函数之外检查它。我正在尝试为“变量”断言!所以我想测试的是不可能的?即使有补丁装饰器——如果可能的话,也会有一些断言的副作用——我会放弃