目前我正在做一些从bash执行的单元测试.单元测试在bash脚本中初始化,执行和清理.该脚本通常包含init(),execute()和cleanup()函数.但它们不是强制性的.我想测试它们是否定义.
我之前通过greping和seding来源做了这个,但它似乎错了.有没有更优雅的方式来做到这一点?
编辑:以下代码片段就像一个魅力:
fn_exists()
{
LC_ALL=C type $1 | grep -q 'shell function'
}
Run Code Online (Sandbox Code Playgroud) 我熟悉这些概念(在大学里参加测试课程),但我不知道如何真正使用它们,因为我从未参与过"真正的"TDD项目.
我即将开始使用Ruby on Rails开发项目(最有可能使用2.3).此应用程序将用于管理数据,用户和一些文件.一开始不会太复杂,但在接下来的6个月内可能会扩展很多,所以我觉得现在是进入TDD的最佳时机.
我对如何做到这一点有一个基本的想法,但我仍然需要一些指示和建议:
我应该阅读什么Ruby on Rails TDD 101文章?
我需要测试什么?
我应该使用什么gem /插件?
我应该使用rspec吗?别的什么?
一旦我完成了所有测试课程,我该如何进行部署?(例如:持续整合)
TDD到底耗时多少?
我是否需要阅读一本关于此的书,或者我可以通过玩它并阅读在线教程来获得所有内容吗?如果我需要读一本书,那本书是什么?
我喜欢用例子学习,所以有人可以告诉我如何去采取TDD方法来解决这个问题:
我有公司.我有联系人.联系人可以链接到1家公司.公司可以拥有多个联系人.我想创建方法来创建联系人,公司和公司的联系人.
您不必在答案中使用此示例,但它会有所帮助:)
我最近发现了pytest.看起来很棒.但是,我觉得文档可能更好.
我正在尝试了解哪些conftest.py文件的用途.
在我(当前很小的)测试套件中,我conftest.py在项目根目录中有一个文件.我用它来定义我注入测试的灯具.
我有两个问题:
conftest.py吗?它有其他用途吗?conftest.py文件吗?我什么时候想这样做?将举例说明.更一般地说,您如何conftest.py在py.test测试套件中定义文件的目的和正确使用?
我有一个maven2多模块项目,在我的每个子模块中,我都有JUnit测试,这些测试都是命名的Test.java,分别Integration.java用于单元测试和集成测试.当我执行:
mvn test
*Test.java执行子模块中的所有JUnit测试.当我执行
mvn test -Dtest=**/*Integration
没有任何Integration.java测试在子模块中执行.
这些看起来像是完全相同的命令,但是带有-Dtest =/*Integration**的命令不起作用它显示在父级别运行的0个测试,没有任何测试
使用添加的rspec-rails生成器来设置RSpec以测试Rails应用程序非常容易.但是如何添加RSpec来测试开发中的宝石?我不是在使用珠宝商或这样的工具.我只是使用Bundler(bundle gem my_gem)来设置新gem的结构并手动编辑*.gemspec.我还加入s.add_development_dependency "rspec", ">= 2.0.0"了gemspec并做了一个bundle install.
是否有一些很好的教程,接下来要做什么让RSpec工作?
当我查看Assert类JavaDoc中的示例时
assertThat("Help! Integers don't work", 0, is(1)); // fails:
// failure message:
// Help! Integers don't work
// expected: is <1>
// got value: <0>
assertThat("Zero is one", 0, is(not(1))) // passes
Run Code Online (Sandbox Code Playgroud)
比方说,我没有看到一个很大的优势assertEquals( 0, 1 ).
如果构造变得更复杂但是你看到更多的优点,那么对于消息可能很好吗?可读性?
我有一个Pylons 1.0应用程序,在测试/功能目录中有一堆测试.我得到了奇怪的测试结果,我想只运行一次测试.鼻子文档说我应该能够在命令行传递测试名称,但无论我做什么,我都会得到ImportErrors
例如:
nosetests -x -s sometestname
Run Code Online (Sandbox Code Playgroud)
得到:
Traceback (most recent call last):
File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.egg/nose/loader.py", line 371, in loadTestsFromName
module = resolve_name(addr.module)
File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.egg/nose/util.py", line 334, in resolve_name
module = __import__('.'.join(parts_copy))
ImportError: No module named sometestname
Run Code Online (Sandbox Code Playgroud)
我得到了同样的错误
nosetests -x -s appname.tests.functional.testcontroller
Run Code Online (Sandbox Code Playgroud)
什么是正确的语法?
我有一个python脚本,它应该正常工作,但我需要编写执行时间.我用谷歌搜索了我应该使用timeit但我似乎无法让它工作.
我的Python脚本如下所示:
import sys
import getopt
import timeit
import random
import os
import re
import ibm_db
import time
from string import maketrans
myfile = open("results_update.txt", "a")
for r in range(100):
rannumber = random.randint(0, 100)
update = "update TABLE set val = %i where MyCount >= '2010' and MyCount < '2012' and number = '250'" % rannumber
#print rannumber
conn = ibm_db.pconnect("dsn=myDB","usrname","secretPWD")
for r in range(5):
print "Run %s\n" % r
ibm_db.execute(query_stmt)
query_stmt = ibm_db.prepare(conn, update)
myfile.close()
ibm_db.close(conn)
Run Code Online (Sandbox Code Playgroud)
我需要的是执行查询并将其写入文件所需的时间 …
验收测试和功能测试之间的真正区别是什么?
每个的亮点或目标是什么?我读到的每个地方都模糊不清.
我目前有一些单元测试,它们共享一组共同的测试.这是一个例子:
import unittest
class BaseTest(unittest.TestCase):
def testCommon(self):
print 'Calling BaseTest:testCommon'
value = 5
self.assertEquals(value, 5)
class SubTest1(BaseTest):
def testSub1(self):
print 'Calling SubTest1:testSub1'
sub = 3
self.assertEquals(sub, 3)
class SubTest2(BaseTest):
def testSub2(self):
print 'Calling SubTest2:testSub2'
sub = 4
self.assertEquals(sub, 4)
if __name__ == '__main__':
unittest.main()
Run Code Online (Sandbox Code Playgroud)
以上的输出是:
Calling BaseTest:testCommon
.Calling BaseTest:testCommon
.Calling SubTest1:testSub1
.Calling BaseTest:testCommon
.Calling SubTest2:testSub2
.
----------------------------------------------------------------------
Ran 5 tests in 0.000s
OK
Run Code Online (Sandbox Code Playgroud)
有没有办法重写上面的内容,以便第一个testCommon不被调用?
编辑: 我没有运行上面的5个测试,而是希望它只运行4个测试,2个来自SubTest1,另外2个来自SubTest2.似乎Python unittest自己运行原始的BaseTest,我需要一种机制来防止这种情况发生.