如果您正在编写库或应用程序,那么单元测试文件会在哪里进行?
将测试文件与主应用程序代码分开是很好的,但将它们放入app根目录内的"tests"子目录中是很尴尬的,因为这会导致导入您将要测试的模块变得更加困难.
这里有最好的做法吗?
SQLAlchemy flush()和commit()SQLAlchemy 之间有什么区别?
我已经阅读了文档,但没有更明智 - 他们似乎假设我没有预先理解.
我对它们对内存使用的影响特别感兴趣.我正在从一系列文件(总共约500万行)中将一些数据加载到数据库中,并且我的会话偶尔会崩溃 - 它是一个大型数据库和一台内存不足的机器.
我想知道我是否使用了太多但commit()没有足够的flush()电话 - 但是如果没有真正了解其中的差异,那就很难说了!
查看bash(1)手册页中的"Array"部分,我没有找到切片数组的方法.
所以我想出了这个过于复杂的功能:
#!/bin/bash
# @brief: slice a bash array
# @arg1: output-name
# @arg2: input-name
# @args: seq args
# ----------------------------------------------
function slice() {
local output=$1
local input=$2
shift 2
local indexes=$(seq $*)
local -i i
local tmp=$(for i in $indexes
do echo "$(eval echo \"\${$input[$i]}\")"
done)
local IFS=$'\n'
eval $output="( \$tmp )"
}
Run Code Online (Sandbox Code Playgroud)
像这样使用:
$ A=( foo bar "a b c" 42 )
$ slice B A 1 2
$ echo "${B[0]}" # bar
$ echo "${B[1]}" # a …Run Code Online (Sandbox Code Playgroud) 我是reStructuredText的忠实粉丝,但是支持它的工具分散在整个互联网上.在官方的工具列表是不完整的和/或过时的,并且只能通过提交更新特权.有一段时间,维基百科的reStructuredText页面上有一个全面的列表,但这显然" 不符合Web内容的知名度指南 " 并被删除.
所以把它放在一个问题形式中:在使用reStructuredText时,人们期望找到哪些工具支持,例如文本编辑器,Wiki软件,转换器和reStructuredText转换器等等?
考虑输入:
=sec1=
some-line
some-other-line
foo
bar=baz
=sec2=
c=baz
Run Code Online (Sandbox Code Playgroud)
如果我只想处理= sec1 =我可以通过以下方式注释掉该部分:
sed -e '/=sec1=/,/=[a-z]*=/s:^:#:' < input
Run Code Online (Sandbox Code Playgroud)
......好吧,差不多.
这将注释包括 "= sec1 ="和"= sec2 ="行的行,结果将类似于:
#=sec1=
#some-line
#some-other-line
#
#foo
#bar=baz
#
#=sec2=
c=baz
Run Code Online (Sandbox Code Playgroud)
我的问题是:在sed中从/ START /,/ END /范围中排除开始和结束行的最简单方法是什么?
我知道在很多情况下,"s :::"爪子的细化可以在这种特定情况下给出解决方案,但我在这里遵循通用解决方案.
在" Sed - An Introduction and Tutorial "中,Bruce Barnett写道:"我稍后会告诉你如何限制命令,但不包括包含指定模式的行."但是我无法找到他实际显示的位置这个.
在由Eric Pement编写的" 有用的SED单行文章"中,我只能找到包容性的例子:
# print section of file between two regular expressions (inclusive)
sed -n '/Iowa/,/Montana/p' # case sensitive
Run Code Online (Sandbox Code Playgroud) 在bash中编写多个简单的脚本时,我常常想知道如何使代码可测试.
通常很难为bash代码编写测试,因为它在获取值并返回值的函数上很少,而在检查和设置环境中的某些方面的函数中很高,修改文件系统,调用程序等 - 依赖于环境或具有副作用的功能.因此,设置和测试代码变得比它们测试的代码复杂得多.
例如,考虑一个简单的测试函数:
function add_to_file() {
local f=$1
cat >> $f
sort -u $f -o $f
}
Run Code Online (Sandbox Code Playgroud)
此功能的测试代码可能包括:
add_to_file.before:
foo
bar
baz
Run Code Online (Sandbox Code Playgroud)
add_to_file.after:
bar
baz
foo
qux
Run Code Online (Sandbox Code Playgroud)
和测试代码:
function test_add_to_file() {
cp add_to_file.{before,tmp}
add_to_file add_to_file.tmp
cmp add_to_file.{tmp,after} && echo pass || echo fail
rm add_to_file.tmp
}
Run Code Online (Sandbox Code Playgroud)
这里有5行代码由6行测试代码和7行数据测试.
现在考虑一个稍微复杂的案例:
function distribute() {
local file=$1 ; shift
local hosts=( "$@" )
for host in "${hosts[@]}" ; do
rsync -ae ssh $file $host:$file
done
}
Run Code Online (Sandbox Code Playgroud)
我甚至不能说如何开始为此测试...
那么,有一个很好的方法在bash脚本中做TDD,还是我应该放弃并把我的努力放在别的地方?
我来自Java背景,我可能有类似的东西enum Direction { NORTH, SOUTH, EAST, WEST},我可以使用增强的for循环依次对每个值做一些事情,如:
for(Direction dir : Direction.values()) {
//do something with dir
}
Run Code Online (Sandbox Code Playgroud)
我想用Rust枚举做类似的事情.
我刚刚偶然发现了bash语法:
foo=42
bar=$[foo+1] # evaluates an arithmetic expression
Run Code Online (Sandbox Code Playgroud)
当我用Google搜索时,我找到了 http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html#sect_03_04_05:
3.4.6.算术扩展
算术扩展允许评估算术表达式和结果的替换.算术扩展的格式是:
Run Code Online (Sandbox Code Playgroud)$(( EXPRESSION ))...
只要有可能,Bash用户应尝试使用方括号的语法:
Run Code Online (Sandbox Code Playgroud)$[ EXPRESSION ]但是,这只会计算EXPRESSION的结果,并且不进行测试......
在我的bash手册页中,我只能找到如下$(( EXPRESSION ))形式:
foo=42
bar=$((foo+1)) # evaluates an arithmetic expression
Run Code Online (Sandbox Code Playgroud)
那么什么测试不是用$[...]那个做的$((...)),或者$[...]只是遗留版本$((...))?
虽然我已经看到了OpenAPI规范中的示例:
Run Code Online (Sandbox Code Playgroud)type: object additionalProperties: $ref: '#/definitions/ComplexModel'
我不明白为什么使用additionalPropertiesMap是地图/字典的正确模式.
这个规范唯一具体的内容additionalProperties也是没有用的:
以下属性取自JSON Schema定义,但其定义已调整为Swagger规范.它们的定义与JSON Schema中的定义相同,只有在原始定义引用JSON模式定义的情况下,才使用模式对象定义.
- 项目
- 所有的
- 性能
- additionalProperties
所以我有这个基于Makefile的构建系统,我的用户觉得它运行得太慢了.为了这个问题,我们将性能定义为确定实际应该做什么所花费的时间.
我可以看到一些优化途径 -
make -C- 但我想先知道我的瓶颈在哪里.由于没有分析的优化是浪费生命,我想问:如何分析Makefile?
假设我继承的系统设计得相当好,即它已经实现了最常见的交易技巧:(主要是)非递归make,ccache,预编译头,自动生成的头依赖等).
......而且只是为了抢占一些可能的答案.我知道可能会有更快更好的构建系统然后GNU制作 - (就个人而言,我迫不及待地想看看CMake的人会对Ninja系统提出什么) - 但遗憾的是,交换构建系统并不在卡片中.