如何模拟对象';在python中写入同一对象的函数?
如果我尝试运行这个测试,我仍然会得到如何模拟对象';在python中写入同一对象的函数?,python,unit-testing,mocking,python-unittest,Python,Unit Testing,Mocking,Python Unittest,如果我尝试运行这个测试,我仍然会得到employee.address.zipCode作为None而不是123。如何解决此问题 不需要测试属性是否已实际设置;您的测试应仅涵盖调用该方法的情况: class Employee: address = models.ForeignKey(Address) def setZipCode(self, zipcode): setattr(self, 'zipCode', zipcode) def set_address
employee.address.zipCode
作为None
而不是123。如何解决此问题 不需要测试属性是否已实际设置;您的测试应仅涵盖调用该方法的情况:
class Employee:
address = models.ForeignKey(Address)
def setZipCode(self, zipcode):
setattr(self, 'zipCode', zipcode)
def set_address_property(self, target_property, value):
try:
setattr(self.address, target_property, value)
self.address.save()
except ObjectDoesNotExist:
# TODO. Figure out what to do here
print 'Cannot save'
return
def get_address_property(self, target_property, default):
try:
return getattr(self.address, target_property)
except ObjectDoesNotExist:
return default
@property
def zipCode(self):
return self.get_address_property('zipCode', None)
@zipCode.setter
def zipCode(self, value):
self.set_address_property('zipCode', value)
def functionToTest(employee):
# Blah Blah Blah...
employee.setZipCode(123)
def testFunctionToTest(self):
employee = MagicMock()
employee.address.zipCode = None
employee.attribute.setZipCode = lambda x, y: setattr(x.address, 'zipCode', y)
functionToTest(employee)
self.assertEquals(employee.address.zipCode, 123)
测试
employee.setZipCode()
是否正确工作是对employee
类进行单元测试的主题,并且超出了测试fuctionToTest()
函数的范围。您不需要测试属性是否已实际设置;您的测试应仅涵盖调用该方法的情况:
class Employee:
address = models.ForeignKey(Address)
def setZipCode(self, zipcode):
setattr(self, 'zipCode', zipcode)
def set_address_property(self, target_property, value):
try:
setattr(self.address, target_property, value)
self.address.save()
except ObjectDoesNotExist:
# TODO. Figure out what to do here
print 'Cannot save'
return
def get_address_property(self, target_property, default):
try:
return getattr(self.address, target_property)
except ObjectDoesNotExist:
return default
@property
def zipCode(self):
return self.get_address_property('zipCode', None)
@zipCode.setter
def zipCode(self, value):
self.set_address_property('zipCode', value)
def functionToTest(employee):
# Blah Blah Blah...
employee.setZipCode(123)
def testFunctionToTest(self):
employee = MagicMock()
employee.address.zipCode = None
employee.attribute.setZipCode = lambda x, y: setattr(x.address, 'zipCode', y)
functionToTest(employee)
self.assertEquals(employee.address.zipCode, 123)
测试
employee.setZipCode()
是否正确工作是对employee
类进行单元测试的主题,并且超出了测试fuctionToTest()
函数的范围。setZipCode的意义何在?如果您必须有一个方法,为什么要使用setattr
而不仅仅是将值赋给self.address.zipCode
?让我编辑setZipCode函数。setZipCode
有什么意义?如果必须有一个方法,为什么要使用setattr
而不是将值赋给self.address.zipCode
?让我编辑setZipCode函数。这很有意义。但是我想验证这个属性是否设置正确。@user1159517:同样,这是在测试Employee
是否正确实现。您不是在测试员工
,而是在测试功能测试
。该功能不需要关心员工是否正确执行了Employee
。它只需要相信它是真的,这是有道理的。但是我想验证这个属性是否设置正确。@user1159517:同样,这是在测试Employee
是否正确实现。您不是在测试员工
,而是在测试功能测试
。该功能不需要关心员工是否正确执行了Employee
。它只需要相信它是。