我正在考虑将一些 public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{code}/{culture}/{controller}/{action}/{id}",
defaults: new {code ="efs",culture="fr-ca", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute("Error", "{*url}", new { controller = "Error", action = "Error" });
}
}
测试转换为Pytest测试以利用Pytest的灯具。然而,unittest.TestCase
的一个功能是我无法轻易找到Pytest中的等价物,它是创建测试套件并运行它们的能力。我目前经常做这样的事情:
unittest
通过使用import unittest
class TestSomething(unittest.TestCase):
def test_1(self):
self.assertEqual("hello".upper(), "HELLO")
def test_2(self):
self.assertEqual(1+1, 2)
if __name__ == "__main__":
suite = unittest.TestSuite()
# suite.addTest(TestSomething('test_1'))
suite.addTest(TestSomething('test_2'))
runner = unittest.TextTestRunner()
runner.run(suite)
注释和注释,我可以轻松选择要运行的测试。我如何用Pytest做类似的事情?
答案 0 :(得分:2)
您可以使用-k
参数来运行特定测试。例如
# put this in test.py
import unittest
class TestSomething(unittest.TestCase):
def test_1(self):
self.assertEqual("hello".upper(), "HELLO")
def test_2(self):
self.assertEqual(1+1, 2)
在类TestSomething
中运行所有测试可以这样完成:
py.test test.py -k TestSomething
仅运行test_2
:
py.test test.py -k "TestSomething and test_2"
中的更多示例
答案 1 :(得分:2)
另一种方法是使用特殊的测试名称。这些可以在pytest.ini文件中进行配置。
# content of pytest.ini
# can also be defined in tox.ini or setup.cfg file, although the section
# name in setup.cfg files should be "tool:pytest"
[pytest]
python_files=check_*.py
python_classes=Check
python_functions=*_check
另一种方法是在conftest.py中采取行动。在此示例中,使用了collect_ignore配置变量。它是要忽略的测试路径列表。在此示例中,始终忽略test_somthing.py以进行收集。如果我们使用python 3进行测试,则忽略test_other_module_py2.py。
# content of conftest.py
import sys
collect_ignore = ["test_something/test_something.py"]
if sys.version_info[0] > 2:
collect_ignore.append("test_other/test_other_module_py2.py")
这些是从pytest章节Changing standard (Python) test discovery
的文档中略有提取的跳转pytest。真是太好了。
答案 2 :(得分:1)
除了使用-k
过滤器之外,您还可以命名要运行的特定测试类或案例,
py.test test.py::TestSomething::test_2
只运行test_2
答案 3 :(得分:1)
认为最好的方法是使用自定义pytest标记。
您应该使用标记特定测试(您要运行的测试)
@pytest.mark.mymarkername
使用命令使用自定义标记仅运行测试:
py.test -v -m mymarkername
在这里您可以找到有关标记的更多信息: http://doc.pytest.org/en/latest/example/markers.html
答案 4 :(得分:0)
基于mbatchkarov的答案,由于我的测试名称可能会非常冗长,我希望仍然能够通过评论进出线并点击"来选择测试。 CNTRL + B"在Sublime(或" Cntrl + R"使用Atom Runner)。一种方法如下:
import unittest
import pytest
class TestSomething(unittest.TestCase):
def test_1(self):
self.assertEqual("hello".upper(), "HELLO")
def test_2(self):
self.assertEqual(1+1, 2)
if __name__ == "__main__":
tests_to_run = []
# tests_to_run.append('TestSomething and test_1')
tests_to_run.append('TestSomething and test_2')
tests_to_run = " or ".join(tests_to_run)
args = [__file__, '-k', tests_to_run]
pytest.main(args)
这背后的想法是因为Pytest接受一个字符串表达式来匹配测试(而不仅仅是一个测试列表),所以必须生成一个仅匹配一个测试的表达式列表,并使用or
连接它们。