我正在尝试为这样的类编写测试:
from public_library import SuperClass
from another_library import Foo
class MyClass(SuperClass):
def __init__(self):
# Call super class
super(MyClass, self).__init__()
self._foo = Foo(
name='Some Name',
thing='Some Thing',
# self.something is defined in SuperClass.__init__()
cool=self.something.cool(),
)
在我的测试中,我模拟了Foo
课程并致电assert_called_once_with()
以确保self._foo
设置正确。但是,我无法弄清楚如何获得self.something.cool()
的返回值。
当然,我可以将返回值设置为self
下的实例变量,并在我的测试中使用它,但这似乎是一个丑陋的解决方案。有没有办法让我patch()
来做这件事?
答案 0 :(得分:0)
测试逻辑的推荐方法是在结束时断言预期结果。鉴于我们不了解您的逻辑,您可以期望返回任何值。运行单元测试时,您实际上可以调用函数并获得返回值。一个常见的例子:
def parse_http():
response = socket.recvfrom(2048) # you don't want to wait for a connection to test your logic, so you mock it, how?
return response[response.find('\r\n\r\n'):]
@patch('socket', 'recvfrom')
def testParseHttp(socket_recv_from):
socket_recv_from.return_value = 'HTTP 1.1\r\n\r\nsomeresponse'
assert parse_http() == 'someresponse'
希望这能解决你的问题,因为我的目的是解释一个模拟的返回值和一个断言的返回值。