pytest测试类调用类方法,类型错误只需2个参数(给定1个)

时间:2015-05-27 11:48:09

标签: python unit-testing pytest

我有一个测试类来测试我的方法,但是我有一些传递self的问题,它们都在class和test class中。

我的方法:

def get_all_links(self):
    """return all the links inside an html

    :return: list of links from an html page
    :rtype: list
    """
    return self.html.find_all('a')

我的测试用例:

    @parameterized.expand(["http://www.google.com", "http://www.walla.com"])
    def test_get_all_links_known_links(self, known_link):
        """check get_all_links with a known link list

        :param known_link: lick to find
        :type known_link: str
        """
        html = Parser(open(os.path.normpath(os.path.join(self.root, "test.html"))))

        self.assertTrue(any([known_link in str(l) for l in html.get_all_links()]))

错误:

E TypeError: test_get_all_links_known_links() takes exactly 2 arguments (1 given)

/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py:329: TypeError
...

3 个答案:

答案 0 :(得分:4)

真的不需要在这里继承unittest.TestCase

您还可以"参数化"使用pytest进行测试:

示例:

import pytest


from app.objects import Root  # Example


known_links = [
    "http://www.google.com",
     "http://www.walla.com"
]


@pytest.fixture()
def root(request):
    return Root()  # Root object


@pytest.mark.parametrize("known_links", known_links)
def test_get_all_links_known_links(root, known_link):
    html = Parser(
        open(os.path.normpath(os.path.join(root, "test.html")))
    )

    assert any([known_link in str(l) for l in html.get_all_links()])

请参阅:

答案 1 :(得分:2)

在使用装饰器之前,您需要导入parameterized

from nose_parameterized import parameterized

答案 2 :(得分:0)

self.

前添加html.get_all_links
self.assertTrue(any([known_link in str(l) for l in self.html.get_all_links()]))

Python必须能够在命名空间中找到该方法。通过self(即您的对象实例),它可以找到实例命名空间中的所有条目以及其类命名空间中的所有条目等。 有关类/方法/属性/命名空间的信息,请参阅here。 另请参阅我对类似问题的回答here