Как получить return_value, а не объект при использовании MagicMock и Monkeypatch - PullRequest
0 голосов
/ 15 июня 2019

Я узнаю о юнит-тестах.Я хочу издеваться над return_value при открытии файла.Но я получаю объект, а не ценность.

Я вижу много сообщений о возврате экземпляра класса с помощью mock_file (). Readfile =… а не mock_file.readfile =…, но я не могу заставить его работать.

Я использую python 3.6 с pytest 4.6.3


# In file Test_ReadFromFile.py

import pytest

from pytest import raises
from unittest.mock import MagicMock

from LineReader import readFromFile

def test_returnsCorrectString(monkeypatch):
    mock_file = MagicMock()
    mock_file.readLine = MagicMock()
    mock_file.readLine.return_value = "test line"
    mock_open = MagicMock(return_value=mock_file)
    monkeypatch.setattr("builtins.open", mock_open)
    result = readFromFile("blah")
    mock_open.assert_called_once_with("blah", 'r')
    assert result == "test line"

# In file LineReader.py

import os

def readFromFile(filename):
    infile = open(filename, "r")
    line = infile.readline()
    return line


Я получаю следующее сообщение об ошибке:

AssertionError: assert <MagicMock name='mock.readline()' id='2003604533768'> == 'test line'

Есть идеи, в чем проблема?Thx

...