python - 在Python中模拟对象的构造函数

标签 python unit-testing mocking

我想测试一个从网页解析数据的函数,但我不希望我的测试依赖于 HTML 代码或互联网的修改,因此我保存了网页。我想测试的函数中的问题是:

url_query = "http://www.allocine.fr/film/fichefilm-%s/similaire/" %allocine_id
response = requests.get(url_query)
soup = BeautifulSoup(response.text, "html.parser")

所以我在测试中做了:

def test_Allocine_matrix_reloaded(self):
    #Load result Matrix allocine API
    test_file = open(MATRIX_RELOADED_TEST_FILE)
    matrix_reloaded_data = json.load(test_file)
    test_file.close()

    #Load result Matrix sim allocine webpage
    test_page = open(MATRIX_RELOADED_TEST_FILE)
    matrix_reloaded_sim_page = test_page.read()
    test_page.close()

    #Mocking functions
    allocine.get_allocine_info = mock.MagicMock(return_value=matrix_reloaded_data)
    requests.get = mock.MagicMock(return_value=matrix_reloaded_sim_page)

但是我遇到了错误:

Traceback (most recent call last):
  File "info_allocine_test.py", line 34, in test_Allocine_matrix_reloaded
    friends_allocine_info = allocine.AllocineInfo(matrix_realoaded_allocine_id)
  File "info_allocine_flat.py", line 116, in __init__
    sim_allocine['sim'] = scrap_similar_movie_allocine(allocine_id)
  File "info_allocine_flat.py", line 255, in scrap_similar_movie_allocine
    soup = BeautifulSoup(response.text, "html.parser")
AttributeError: 'str' object has no attribute 'text'

如何获取 soup 变量中的 HTML 代码? (我正在使用unites和mock)

最佳答案

这里最好的做法是将这三行提取到一个单独的方法或函数中,该方法或函数返回下载的文本或 BeautifulSoup 对象。您的实际函数可以调用此函数来下载文本,但您的测试可以模拟整个函数。

关于python - 在Python中模拟对象的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36469715/

相关文章:

bash 脚本的 Python subprocess.check_call 不等待子进程完成

unit-testing - 带有 Spock Framework Mock "_"选项的 Groovy Spread Operator

java - EasyMock:andAnswer() 与 andDelegateTo()

.net - .NET 中有什么方法可以以编程方式监听 HTTP 流量吗?

delphi - 调用Button1在Unit2中单击Form1/Unit1

python - 使用和不使用 pytest-mock 模拟标准库函数

python - django 预先计算并缓存一个 View

python - Numba Prange 示例不起作用

python - pip 在 Mac OS X Mavericks (10.9) 上引发 stdio.h not found 错误

java - 是否有一个等效的 doCallRealMethod 用于 spy (又名 doCallMockMethod)?