pytest 测试 class 调用 class 方法,类型错误正好需要 2 个参数(给定 1 个)
pytest test class calling class methods, Type error takes exactly 2 arguments (1 given)
我有一个测试 class 来测试我的方法,但我在通过自我时遇到了一些问题,它们都在 class 和测试 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
...
在html.get_all_links
前加上self.
self.assertTrue(any([known_link in str(l) for l in self.html.get_all_links()]))
Python 必须能够在命名空间中找到该方法。通过 self(即您的对象实例),它可以找到实例命名空间中的所有条目及其 class 命名空间中的所有条目,等等。
有关 classes/methods/attributes/namespaces 的信息,请参阅 here。
另请参阅我对类似问题的回答
你真的不需要在这里继承unittest.TestCase
:
您也可以 "parametize" 使用 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()])
参见:
使用装饰器之前需要导入parameterized
:
from nose_parameterized import parameterized
我有一个测试 class 来测试我的方法,但我在通过自我时遇到了一些问题,它们都在 class 和测试 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
...
在html.get_all_links
self.
self.assertTrue(any([known_link in str(l) for l in self.html.get_all_links()]))
Python 必须能够在命名空间中找到该方法。通过 self(即您的对象实例),它可以找到实例命名空间中的所有条目及其 class 命名空间中的所有条目,等等。
有关 classes/methods/attributes/namespaces 的信息,请参阅 here。
另请参阅我对类似问题的回答
你真的不需要在这里继承unittest.TestCase
:
您也可以 "parametize" 使用 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()])
参见:
使用装饰器之前需要导入parameterized
:
from nose_parameterized import parameterized