我刚刚开始进入测试开发,并且很难理解要测试什么。那里有很多 foobar 示例,但我很难知道如何测试我的项目单元。例如,采用以下函数,它简单地将文本文件的行作为列表返回:
def getLines(filename):
try:
f = open(filename,'rb')
lines = f.readlines()
f.close()
except:
break
return lines
Run Code Online (Sandbox Code Playgroud)
如果这是您的功能,您会测试什么?您不需要编写代码,如果您愿意,只需概括地告诉我即可。
谢谢
好吧,这绝对是我的错,但我需要清理它。我的一个测试脚本相当一致(但并不总是)以一种会给其他人带来问题的方式更新我的数据库(基本上,它剥夺了测试用户对测试数据库的访问权限)。
通过在每个单独的测试之后或每个测试脚本完成之后运行一个简单的查询,我可以很容易地找出是哪个脚本导致了这种情况。
即pytest
, or nose2
, 将执行以下操作:
run test_aaa.py
run check_db_access.py #ideal if I could induce a crash/abort
run test_bbb.py
run check_db_access.py
...
Run Code Online (Sandbox Code Playgroud)
你明白了。是否有我可以使用的内置选项或插件?测试套件目前适用于 pytest 和nose2,因此两者都是一个选项。
编辑:这不是一个测试数据库,也不是一个加载夹具的数据库。这是许多极其复杂的实时数据库中的任何一个的快照,并且测试套件,根据其设计,应该自省数据库并弄清楚如何运行其测试(几乎所有访问都是只读的) . 这很好用,并且至少在我的特定上下文中具有许多有益的方面,但这也意味着没有拆卸或夹具负载供我使用。
我正在学习关于可靠的软件开发的一点,我意识到"轻快的踏板到奖牌代码并且没有真正的计划祈求良好的结果"方法是行不通的.
我正在寻求用坚实的做法取代我的旧(并且不可否认的不是很好)的方法.我之前从未使用过单元测试,现在还在尝试学习金字塔(这要归功于完整的文档)我还试图了解一般的单元测试如何使我受益(同样在将来添加集成测试) ,回归测试等).我读了这个介绍来探测http://ivory.idyll.org/articles/nose-intro.html,并且(不要轻浮)我看到你可以使用单元测试来测试正则表达式,看看if a=1; b=1; now does a == b
.这就是我现在能看到的全部内容.我不需要这个框架.我可以使用正则表达式测试器,以及'测试'的常识.如果我要使用单元测试来查看两个变量是否相等,那么每次创建变量并将其设置为等于某个变量时,我是不是必须创建测试?文章中的例子似乎有点武断.
我的想法是开放学习单元测试的好处,但我想知道单元测试的实际应用是什么.
一句话:我之前从未使用过单元测试,所以请告诉我为什么我错了,应该开始使用测试.
干杯!!
我正在使用django-nose
运行我的测试,我需要知道它们何时从我的视图/模型方法/等中运行,所以我可以跳过诸如检查缓存值或调用一些项目外部资源之类的东西,例如仅在运行测试时.
有一些环境变量可用或类似的东西会很好,所以我可以这样做:
if os.environ.get('TESTS_ARE_RUNNING'):
# skip this
Run Code Online (Sandbox Code Playgroud)
要么
if not TESTS_ARE_RUNNING:
# do something
Run Code Online (Sandbox Code Playgroud)
有人知道实现这个目标的方法吗?
在此先感谢任何帮助:)
我刚开始一个python项目,我正在尝试不同的测试框架.我遇到的问题是nose2找不到我的测试:
$ nose2 --verbose
在0.000秒内进行0测试
好
而鼻子测试找到了所有
$ nosetests - 仅收集
.................................
跑了33个测试在0.004s
好
其他我可以在同一目录下使用nose2执行单个测试:
$ nose2 myproj.client.test.mypkg.mymodule_test
.
以0.007s进行1次测试
好
myproj.client.test.mypkg.mymodule_test的位置如下:
'''
Created on 18/04/2013
@author: julia
'''
from unittest import TestCase, main
import os
from myproj.client.mymodule import SUT
from mock import Mock
import tempfile
class SUTTest(TestCase):
def setUp(self):
self.folder = tempfile.mkdtemp(suffix='myproj')
self.sut = SUT(self.folder, Mock())
self.sut.init()
def test_wsName(self):
myfolder = os.path.join(self.folder, 'myfolder')
os.mkdir(myfolder)
self.sut.change_dir(myfolder)
self.assertEquals(self.SUT.name, 'myfolder')
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
我一直在看文档,我找不到可能的原因.
在MacOs 10.8.3上运行python 2.7.3
尝试使用django-nose运行单个TestCase时出错
$ ./manage.py test someapp.ModelTest
nosetests someapp.ModelTest --nologcapture --verbosity=1
Creating test database for alias 'default'...
E
======================================================================
ERROR: Failure: AttributeError ('module' object has no attribute 'ModelTest')
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/nose/loader.py", line 402, in loadTestsFromName
module = resolve_name(addr.module)
File "/usr/lib/python2.7/site-packages/nose/util.py", line 321, in resolve_name
obj = getattr(obj, part)
AttributeError: 'module' object has no attribute 'ModelTest'
----------------------------------------------------------------------
Ran 1 test in 0.003s
FAILED (errors=1)
Run Code Online (Sandbox Code Playgroud)
请注意,当我$ ./manage.py test someapp
成功运行它时,运行someapp/tests.py中的所有TestCase; 只有在尝试运行单个TestCase时才会失败.
Nose会自动运行它在项目中找到的任何函数test_*
.所以,例如,如果有一个函数叫:
"""
test_server_setup.py
sets up a pristine database to use for testing.
DO NOT RUN ON PROD
"""
def test_server_init():
drop_all_tables()
Run Code Online (Sandbox Code Playgroud)
...当你nosetests
从项目的根目录运行命令时,鼻子会运行它.我唯一的选择是重命名这个函数,还是有另一种方法我可以更改文件,以便鼻子忽略它?
我有以下脚本设置干净PYTHONPATH
:
#!/bin/bash
# Get the directory the script is in
DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)
$ Walk up to root of branch dir
DIR=$DIR/../../..
PYTHONPATH=$DIR/module1
PYTHONPATH=$PYTHONPATH:$DIR/module2
PYTHONPATH=$PYTHONPATH:$DIR/module3
PYTHONPATH=$PYTHONPATH:$DIR/module4
export PYTHONPATH
Run Code Online (Sandbox Code Playgroud)
该脚本应该与nosetest命令一起运行,以允许测试在需要时导入所有必需的模块而不会出现任何问题:
./path/to/script/PythonPath.sh && nosetests <tons of other arguments>
但是,当我运行上面的命令时,我得到一个ImportError
模块,声明它不存在.我echo
在脚本的末尾添加了一个语句来帮助调试,PYTHONPATH
它完全是应该的.我也试过PYTHONPATH
手动设置,似乎无法重现同样的问题.
我想获得一些帮助,以使用multiprocessing模块并行运行多个python测试用例。我创建了一个FooTest类,其中包含10个测试用例(testA,testB ...)。类之外有一个测试用例test_foo。
如何使用python多处理模块并行运行所有测试用例?谢谢您的帮助。
import unittest
import time
def setUp():
print "module setup"
def test_foo():
pass
class FooTest(unittest.TestCase):
# preparing to test
def setUp(self):
""" Setting up for the test """
print "FooTest:setUp_:begin"
# ending the test
def tearDown(self):
"""Cleaning up after the test"""
print "FooTest:tearDown_:begin"
# test routine A
def testA(self):
"""Test routine A"""
print "FooTest:testA"
time.sleep(2)
# test routine B
def testB(self):
"""Test routine B"""
print "FooTest:testB"
# test routine C
def testC(self):
"""Test routine C"""
print "FooTest:testC"
# …
Run Code Online (Sandbox Code Playgroud) 我正在构建一个设备对象来从python中连接设备轮询数据,我正在尝试使用nose测试对象及其所有功能的交互操作.我在编写时间戳时遇到问题,time.time()
因为每次调用函数时结果值都不同,这严重搞砸了一些测试,例如这个数据收集函数:
def getData(self, data):
if type(data) is not type({}):
#print "Bad Type!"
raise TypeError
else:
#print "Good Type!"
self.outD = {}
datastr = ""
for key, value in data.iteritems():
self.outD[key] = value
self.outD["timestamp"] = time.time()
self.outD["id"] = self.id
self._writeCSV()
Run Code Online (Sandbox Code Playgroud)
当我测试此函数的输出并比较生成的CSV文件时,它总是因时间戳而失败.我可以通过添加测试标志在我的设备对象中将其分出来,但我想知道是否有一个内置的方法来处理这样的问题,其中函数的结果可以用给定的值替换或本地函数伪造的time.time()
通话.这可能吗?
nose ×10
python ×6
unit-testing ×3
django ×2
django-nose ×2
testing ×2
bash ×1
nosetests ×1
php ×1
pyramid ×1
pytest ×1
python-2.7 ×1
timestamp ×1