亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從單元測試測試文件范圍內的變量

如何從單元測試測試文件范圍內的變量

慕容森 2021-11-09 13:40:01
我有一個這樣的程序class A():    def __init__(self):        self.foo = xif __name__ == '__main__':    x = 96    a=A()    print(a.foo)當它從 shell “python foo.py” 運行時,它會打印出 96我也有 test_foo.pyimport fooimport unittestclass TestFoo(unittest.TestCase):    def test1(self):        x=37        a=foo.A()        self.assertEqual(a.foo, 37)if __name__ == '__main__':    unittest.main()當我從 shell 運行這個 test_foo.py 時,我得到$ python test_foo.py E======================================================================ERROR: test1 (__main__.TestFoo)----------------------------------------------------------------------Traceback (most recent call last):  File "test_foo.py", line 8, in test1    a=foo.A()  File "/home/zzz/foo.py", line 3, in __init__    self.foo = xNameError: global name 'x' is not defined----------------------------------------------------------------------Ran 1 test in 0.000sFAILED (errors=1)所以我的問題是,是否可以從 test_foo.py 測試 foo.py,設置 x 并看到它在類 A 中使用。 f 而不改變 foo.py 程序顯然,這是一個真實程序的簡化版本我用 python 3.6 和 2.7 得到相同的結果我曾嘗試使用 的各種組合,global但沒有找到使用它的方法
查看完整描述

3 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

您可以x在此處訪問全局范圍內的變量:

        self.foo = x

當您直接運行腳本時__name__是' main ',而不是設置全局變量x而不是construct A()。當您導入foo模塊代碼時,if不執行。x全局作用域和任何外部作用域中都沒有變量。


查看完整回答
反對 回復 2021-11-09
?
四季花海

TA貢獻1811條經驗 獲得超5個贊

您的x變量是在if檢查是否foo.py作為主程序運行的塊內定義的,因此何時foo.py由test_foo.py,導入,x將不會被定義,因此會出現錯誤。


您應該x在if塊外定義:


x = 96


class A():

    def __init__(self):

        self.foo = x


if __name__ == '__main__':

    a=A()

    print(a.foo)

而在test_foo.py,如果你想覆蓋的價值x的foo,你應該做foo.x=37的,而不是x=37因為x否則將是一個局部變量test1。


查看完整回答
反對 回復 2021-11-09
?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

您需要將其更改為:


class A():

    def __init__(self,x):

        self.foo = x

并在測試中:


class TestFoo(unittest.TestCase):

    def test1(self):

        x=37

        a=foo.A(x)

        self.assertEqual(a.foo, 37)


查看完整回答
反對 回復 2021-11-09
  • 3 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號