我们正在使用Zend framework 1.11.11.我们的服务器有PHPUnit 3.7.9.我们知道我们的Zend Framework版本不支持PHPUnit 3.7.9.但到目前为止,我们已经能够使用PHPUnit来测试模型.
但是,当涉及到测试控制器时,PHPUnit失败了.放入dispatch()
代码后try/catch block
,我们了解到它无法加载一个属性Zend_Registry
.它是定义的application.ini
.在模型中使用相同的属性,我们没有问题.
我们可能遗失了什么吗?或者是不可能将PHPUnit 3.7.9与我们的ZF版本一起使用?
这是phpunit.xml:
<phpunit bootstrap="./application/bootstrap.php" colors="true">
<testsuite name="Precision Tests">
<directory>./</directory>
</testsuite>
<filter>
<whitelist>
<directory suffix=".php">../application/</directory>
<directory suffix=".php">../library/</directory>
<exclude>
<directory suffix=".phtml">../application/</directory>
<directory>../library/Zend</directory>
<file>../application/Bootstrap.php</file>
<file>../application/controllers/ErrorController.php</file>
</exclude>
</whitelist>
</filter>
<logging>
<log type="coverage-html" target="./log/report" charset="UTF-8" yui="true" hightlight="true"
lowupperbound="50" highlowerbound="80">
<log type="testdox" target="./log/testdox.html">
</log>
</log>
</logging>
</phpunit>
Run Code Online (Sandbox Code Playgroud)
测试中的bootstrap.php:
<?php
function load($name) {
$paths = array(
"../application/controllers",
"../library",
"../application/models"
);
foreach($paths as $dir) {
$name = str_replace("_", "/", $name);
if(file_exists($dir."/".$name.".php")) …
Run Code Online (Sandbox Code Playgroud) 我有大部分代码的单元测试.但我无法弄清楚如何为主包中的main()中的某些代码生成单元测试覆盖率.
主要功能非常简单.它基本上是一个选择块.它会读取标志,然后调用另一个函数/执行某些操作,或者只是在屏幕上打印帮助.但是,如果未正确设置命令行选项,它将以各种错误代码退出.因此,需要进行子流程测试.
我尝试了子流程测试技术,但修改了代码,使其包含覆盖标记:
cmd := exec.Command(os.Args[0], "-test.run=TestMain -test.coverprofile=/vagrant/ucover/coverage2.out")
Run Code Online (Sandbox Code Playgroud)
以下是原始代码:https ://talks.golang.org/2014/testing.slide#23上述幻灯片的说明:http://youtu.be/ndmB0bj7eyw?t = 47m16s
但它不会生成封面配置文件.我一直无法弄清楚为什么不.它确实为主进程执行测试生成封面配置文件,但当然,在子进程中执行的任何代码都不会标记为已执行.
我尝试尽可能多地实现代码覆盖.我不确定我是否遗漏了某些东西,或者是否有更简单的方法可以做到这一点.或者如果不可能的话.
任何帮助表示赞赏.
谢谢
阿梅尔
当然,我们在main.go中解析主要包中的标志.然后我们有另一个包,我们想要读取一些标志的值.
flags.Args()工作正常,它将返回所有非标志值.
但我无法弄清楚如何读取已经解析的值除了main之外的包中的标志.
可能吗?
谢谢
阿梅尔