1

我对 python 很陌生,来自 php 背景,无法找出组织代码的最佳方式。

目前我正在通过项目欧拉练习来学习python。我想为我的问题解决方案提供一个目录,并为测试提供一个反映此目录的目录。

所以理想情况下:

Problem
    App
        main.py
    Tests
        maintTest.py

使用 php 这很容易,因为我只需 require_once 正确的文件,或修改include_path.

如何在 python 中实现这一点?显然,这是一个非常简单的例子 - 因此,关于如何在更大范围内解决这个问题的一些建议也将非常感激。

4

2 回答 2

0

我一直很喜欢nosetests,所以这是我的解决方案:

问题

App

    __init__.py
    main.py

Tests

    __init__.py
    tests.py

然后,打开命令提示符,CD 到/path/to/Problem并键入:

鼻子测试

它会自动识别并运行测试。但是,请阅读以下内容:

任何与 testMatch 正则表达式匹配的 python 源文件、目录或包(默认情况下:(?:^|[b_.-])[Tt]est)都将被收集为测试(或用于收集测试的源)。[...]

在测试目录或包中,将检查任何与 testMatch 匹配的 python 源文件以查找测试用例。在测试模块中,名称与任何名称的 testMatch 和 TestCase 子类匹配的函数和类将作为测试加载和执行。

这基本上意味着您的测试(您的文件和函数/方法/类)必须以“测试”或“测试”单词开头。

更多关于 Nosetests 用法的信息:基本用法

于 2013-06-22T10:31:23.300 回答
0

这取决于您要使用哪个测试运行程序。

pytest

我最近学会了喜欢pytest

它有一个关于如何组织代码的部分。

如果您无法将 main 导入代码中,则可以使用以下技巧。

单元测试

当我使用时,unittest我会这样做:

带进口主体

Problem
    App
        main.py
    Tests
        test_main.py

test_main.py

import sys
import os
import unittest
sys.path.append(os.path.join(os.path.dirname(__file__), 'App'))
import main

# do the tests

if __name__ == '__main__':
    unittest.run()

或使用 import App.main

Problem
    App
        __init__.py
        main.py
    Tests
        test.py
        test_main.py

test.py

import sys
import os
import unittest
sys.path.append(os.path.dirname(__file__))

test_main.py

from test import *
import App.main

# do the tests

if __name__ == '__main__':
    unittest.run()
于 2013-06-22T09:33:05.373 回答