我对单元测试世界还很陌生,我刚刚决定在本周为我现有的应用添加测试覆盖率.
这是一项艰巨的任务,主要是因为要测试的课程数量,还因为编写测试对我来说都是新的.
我已经为一堆课程编写了测试,但现在我想知道我是否做得对.
当我为一个方法编写测试时,我感觉第二次重写我已经在方法本身中编写的内容.
我的测试似乎与方法紧密相关(测试所有代码路径,期望一些内部方法被调用多次,带有某些参数),似乎如果我重构该方法,即使该方法的最终行为没有改变.
这只是一种感觉,如前所述,我没有测试经验.如果一些更有经验的测试人员可以给我建议如何为现有应用程序编写出色的测试,那将非常感激.
编辑:我很想感谢Stack Overflow,我在15分钟内获得了很多投入,这些投入回答了我刚才在线阅读的更多时间.
我正在尝试<noscript>
使用Javascript 获取标记的内容.我成功地设法在FF,Chrome,Opera甚至IE6中获得它但在IE7上失败(尚未尝试过IE8 +).
基本上,这是减少代码版本:
<noscript>Lorem ipsum</noscript>
<script>
var noscript = document.getElementsByTagName('noscript')[0];
noscript.textContent; // undefined
noscript.innerHTML; // empty string
noscript.childNodes.length; // 0
</script>
Run Code Online (Sandbox Code Playgroud)
我尝试在里面添加元素并定位它们,但没有成功.我试图包装一个父元素并获取它.innerHTML
,但<noscript>
标签之间的任何东西都被丢弃了.
注意:我正在构建一个lazyloader脚本,该<noscript>
元素正是我需要的(浏览器不会获取标记<img>
src
内的属性<noscript>
.)
我正在努力如何使用TortoiseHg正确跟踪嵌套存储库.
我有一个主存储库来跟踪我的整个项目.该项目包含几个存储在plugins /子目录中的小插件.
我希望独立跟踪每个插件(为每个插件提交和推送BitBucket),同时仍然可以对我的项目进行"整体"提交,包括对插件所做的更改并将其推送到其他位置(不是BitBucket).
到目前为止我所做的就是为每个插件创建一个新的repo.我可以轻松地将它们推送到BitBucket.但是当我去提交我的"主"存储库时,TortoiseHg会显示一条错误消息abort: path 'mainrepo\\plugins\\plugin1\\plugin1.php' is inside repo 'mainrepo\\plugins\\plugin1'
.
我可以看到我做错了什么,但我不知道是什么.
我在WinXP上使用了每晚的Mercurial和TortoiseHg(ToirtoiseHg版本0.9.3 + 237-ea50f793bbe4和Mercurial-1.4.3 + 225-70dea42c9406).我读到subrepos处理被添加到这个TortoiseHg构建中,但是,我甚至不确定subrepos是我应该在这里使用的功能.
更新
我已经取得了一些进展,但仍然无法按照我喜欢的方式工作.
这是我的结构:
-- .hg
-- core
-- app
-- file.php
-- file.css
-- plugins
-- plugin1
-- file1.php
-- plugin2
-- file2.php
Run Code Online (Sandbox Code Playgroud)
我去了app/plugins,并在这里克隆了一个来自BitBucket的插件(名为plugin3).然后我在根目录创建了一个.hgsub文件并添加app/plugins/plugin3 = app/plugins/plugin3
到它.然后我能够提交我的整个目录.
但后来我尝试从BitBucket获取最新版本的plugin1,所以我去了app/plugins,删除了plugin1 /文件夹并从BitBucket克隆了plugin1.然后我加入app/plugins/plugin1 = app/plugins/plugin1
了.hgsub但是当我试图提交时,我受到了欢迎abort: path 'app/plugins/plugin1/file1.php' is inside repo 'app\\plugins\\plugin1'
当我的subrepo与插件/目录中已由Hg跟踪的目录具有相同的名称时,问题似乎就开始了.
我究竟做错了什么 ?我应该在插件的.hg中添加/编辑特殊内容吗?
更新
我终于设法让它以我想要的方式工作.
我必须"手动"告诉Mercurial删除plugins/plugin1,plugins/plugin2目录,提交更改,然后从BitBucket克隆plugin1和plugin2,添加app/plugins/plugin1 = app/plugins/plugin1
到.hgsub并提交全部.有效.
删除plugin1/plugin2文件夹后,重要的一步是提交.
我想使用simpleTest编写测试,如果我正在测试的方法导致PHP E_NOTICE
"未定义的索引:foo" ,则会失败.
我试图expectError()
与expectException()
没有成功.simpleTest网页表明simpleTest无法捕获编译时PHP错误,但E_NOTICE
似乎是运行时错误.
有没有办法捕获这样的错误,如果是这样我的测试失败?
我正在使用simpleTest来编写我的PHP测试.我正在写一个文件上传插件,并想知道我是如何测试它的.
我想检查文件是否正确上传,在正确的文件夹中,在需要时正确返回错误等.
如何模拟文件上传(通过$ _FILES变量)?我应该注意哪些问题?
我正在尝试配置我的〜/ .zshrc,以便在文件/目录上完成代码完成工作,因为我需要它.我已经在zstyle完成语法和代码示例上找到了各种各样的资源,但是它的某些部分对我来说仍然是黑魔法.
到目前为止,经过一些小小的测试后,我就在这里.
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'm:{a-zA-Z}={A-Za-z} l:|=* r:|=*'
以下是我对它的理解:
zstyle ':completion:*'
意味着我们要为完成定义配置值matcher-list
是我们更新的配置,这里定义了zsh如何匹配文件/目录建议'm:{a-zA-Z}={A-Za-z}' 'm:{a-zA-Z}={A-Za-z} l:|=* r:|=*'
是传递给matcher-list
配置的参数(值).在这里它变得模糊:
'm:{a-zA-Z}={A-Za-z}'
了匹配大小写不敏感,但我不太明白语法.'m:{a-zA-Z}={A-Za-z} l:|=* r:|=*'
仍然不区分大小写,但也搜索整个字符串中的匹配,而不仅仅是开始.但是,我也没有得到语法.有人可以确认我之前的断言,并在需要时纠正它们,并详细说明参数的巫术语法吗?
谢谢
编辑:哦,对不起,如果问题更适合superuser.com,我有一个难以确定哪个网站更适合它.
我在这个例子中尝试将所有值从一个关联数组复制到另一个关联数组.我正在检查我的代码是否使用了语法错误zsh -n
但是这个抛出了一个test:12: bar: assignment to invalid subscript range
.
#!/usr/bin/env zsh
typeset -A foo bar
foo=(
Adama "Commander"
Tigh "Executive Officer"
Roslin "President"
)
bar=()
for i in ${(k)foo}; do
# "rubbish"
bar[$i]=$foo[$i]
done
Run Code Online (Sandbox Code Playgroud)
如果我取消注释# "rubbish
,zsh -n
停止抱怨.我的代码还是有问题zsh -n
?
php ×2
simpletest ×2
unit-testing ×2
exception ×1
file-upload ×1
javascript ×1
mercurial ×1
noscript ×1
subrepos ×1
testing ×1
tortoisehg ×1
upload ×1
zsh ×1
zshrc ×1