我有這個收集一個人的名字的代碼。
class Person:
#initializing the variables and giving them an empty string as a baseline.
def __init__(self, first_name = '', last_name = ''):
self.first_name = first_name
self.last_name = last_name
@property
#getting first name and returning it for future use.
def first_name(self):
return self._first_name
#setting the first name
@first_name.setter
def first_name(self, first_name):
#capitalizing the first name.
self._first_name = first_name.capitalize()
@property
#getting last name and returning it for future use.
def last_name(self):
return self._last_name
@last_name.setter
#setting last name
def last_name(self, last_name):
#capitalizing last name
self._last_name = last_name.capitalize()
我想創建一個單元測驗來測驗 class/first_name/property 裝飾器,我想看看我是否以正確的方式進行?
import unittest
from person import Person
class TestPerson(unittest.TestCase):
def test_first_name(self):
Person._first_name = first_name('FakeName')
self.assertEqual(Person._first_name(), 'FakeName')
#updated code to fix errors pointed out. The first name works!
#the last name does not.
def test_last_name(self):
testLast = Person('LastName')
#Throws assertion error '' != 'LastName here.
self.assertEqual(testLast.last_name, 'LastName')
if __name__ == "__main__":
unittest.main()
unittest 編碼運行并沒有錯誤地通過,但我想知道它是否使用了屬性裝飾器?在裝飾器和單元測驗方面我有點新手,所以我想確保這實際上是使用屬性裝飾器而不是繞過它,或者我應該以其他方式格式化它(或使用 unittest.mock ,正如其他一些論壇所建議的那樣,但我對 .mock 一點也不熟悉)。
編輯:因為我在凌晨 3 點非常聰明,所以我完全繞過了實際設定一個繼承自 unittest 的類。這已在第二個代碼剪輯中進行了調整。還將我的 last_name 添加到 Person 和 unittest 以獲取有關兩者應如何互動的更多資訊。
編輯 2:所有代碼都已調整為建議的編輯。謝謝大家!會繼續慢慢修正我的錯誤哈??哈。
uj5u.com熱心網友回復:
首先,讓我們在您擔心測驗之前修復該類。
class Person:
def __init__(self, first_name=''):
self.first_name = first_name
@property
def first_name(self):
return self._first_name
@first_name.setter
def first_name(self, first_name):
self._first_name = first_name.capitalize()
@property
def last_name(self):
return self._last_name
@last_name.setter
def last_name(self, last_name):
#capitalizing last name
self._last_name = last_name.capitalize()
只有 getter 和 setter 直接與_first_name屬性互動,并且屬性名稱本身應該是公共介面的一部分(即,不以 a 為前綴_)。(請注意,屬性和支持屬性不能共享相同的名稱。)
現在,測驗:
import unittest
from person import Person
class TestPerson(unittest.TestCase):
def test_first_name(self):
p = Person('fakeName')
self.assertEqual(p.first_name, 'FakeName')
if __name__ == "__main__":
unittest.main()
您需要創建 的實體Person,然后檢查屬性回傳的值是否與預期名稱匹配。對于這個例子,我傳遞了一個非大寫的名稱Person來檢查 setter 是否按預期將其大寫。
此外,測驗方法必須是(的子類)的實體方法unittest.TestCase才能unittest.main找到并運行它。main查找適當命名的類,實體化它們,然后使用這些實體運行適當命名的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/468146.html
