zoukankan      html  css  js  c++  java
  • phpunit 笔记

    很久之前就想写单元测试了,但一直懒,但后来项目文件越来越大

    发现当初真不该偷懒,现在开个新项目,这会可不在偷这个懒了,真可谓后患无穷...

    久了没写phpunit,发现生疏了,看过了一遍手册,http://www.phpunit.de/manual/3.7/en/index.html 
    写了点备份的笔记:

     数据提供者

    为所有方法提供参数数据,循环提供
    public static function data_return
    使用在测试方法上,添加注释
    /**
     * @dataProvider data_return
     */
    直接抛出异常 (注释)
    /**
     * @expectedException myexception
     */
    或者使用
    $this->setExpectedException();抛出异常
    或直接抛出
    测试返回
    . 成功
    F 失败
    E 出错(异常,参数错误等等)
    S 跳过
    I 测试未实现
    markTestIncomplete() 未完成测试
    markTestSkipped()  跳过一个测试
    PHPUnit_Framework_TestCase
    每次运行测试都会调用
    测试运行前调用
    setUp()
    测试结束后调用
    tearDown() //一般做垃圾回收用
    PHPUnit_Framework_TestSuite (用来组织testcase)
    一个测试均会调用一次
    测试运行前调用
    setUp()
    测试结束后调用
    tearDown() //一般做垃圾回收用
    可以添加测试方法(PHPUnit_Framework_TestCase)
    addTestSuite();
    模拟对象
    ========
    //取得一个为kk的实例化对象,有s方法
    $ob= $this->getMock("kk",array("s"));
    //设置s方法的返回值
    $ob->expects($this->any())
    ->method("s")
    ->will($this->returnValue(1));
    //设置s方法会触发异常
    $ob->expects($this->any())
    ->method("s")
    ->will($this->throwException(new Exception("hi")));
    //设置s方法每次调用返回不同值
    $ob->expects($this->any())
    ->method("s")
    ->will($this->onConsecutiveCalls());
    代码覆盖率
    =========
    制定测试代码作用的方法
    @covers class::method
    测试时忽略分析的代码,写在代码中
    // @codeCoverageIgnoreStart
    $this->doSomethingElse();
    // @codeCoverageIgnoreEnd
    代码中的测试用例
    ===============
    可以通过在代码注释中添加assert来该方法测试
    /**
    * @assert (0, 0) == 0
    */

    运行时观察者接口

    phpunit_Framework_TestListener

    实现该接口,用于运行时回调,可在配置中配置或直接实例添加

    使用实例

    /Files/liushannet/code.rar  

    命令参数说明:

     --log-*  日志文件格式及保存到

     --coverage-* 测试覆盖率及保存到

     --testdox-* 测试dox及保存到

     --filter 去除某些目录或文件

     --testsuite 指定suite

     --group 只执行指定组测试

    --exclude-group 执行包该改组测试

    --list-groups 列出所有组

    --test-suffix 测试文件后缀

    --bootstrap 测试前先执行的文件 (部署环境独立)

    --c 配置文件 (详细介绍:http://www.phpunit.de/manual/current/en/appendixes.configuration.html)

    --include-path 运行前先引入文件

    配置 phpunit.xml 实现自动化测试

    <!--
        This is an example phpunit.xml file to get you started
        Copy it to a directory, update the relative paths and rename to phpunit.xml
        Then to run tests cd into it's directory and just run
            phpunit
        (it'll automatically use any phpunit.xml file in the current directory)

        Any options you specify when calling phpunit will override the ones in here
    -->
    <phpunit colors="false" bootstrap="modules/unittest/bootstrap.php">
        <!--测试列表-->
        <testsuites>
            <testsuite name="Kohana Tests">
                <!--directory suffix="Test.php">/path/to/files</directory-->
                <file>modules/unittest/tests.php</file>
            </testsuite>
        </testsuites>
        <!--执行的组-->
        <groups>
          <include>
            <group>kohana.image</group>
          </include>
          <!--exclude>
            <group>name</group>
          </exclude
    -->
        </groups>
        <!--日志记录-->
        <logging>
          <log type="coverage-html" target="./report" charset="UTF-8"/>
          <log type="testdox-html" target="report.html"/>
        </logging>
        <!--环境变量设置-->
        <!--php>
          <includePath>.</includePath>
          <ini name="foo" value="bar"/>
          <const name="foo" value="bar"/>
          <var name="foo" value="bar"/>
          <env name="foo" value="bar"/>
          <post name="foo" value="bar"/>
          <get name="foo" value="bar"/>
          <cookie name="foo" value="bar"/>
          <server name="foo" value="bar"/>
          <files name="foo" value="bar"/>
          <request name="foo" value="bar"/>
        </php
    -->
        <!--代码覆盖的黑白名单-->
        <!--filter>
          <blacklist>
            <directory suffix=".php">/path/to/files</directory>
            <file>/path/to/file</file>
            <exclude>
              <directory suffix=".php">/path/to/files</directory>
              <file>/path/to/file</file>
            </exclude>
          </blacklist>
          <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">/path/to/files</directory>
            <file>/path/to/file</file>
            <exclude>
              <directory suffix=".php">/path/to/files</directory>
              <file>/path/to/file</file>
            </exclude>
          </whitelist>
        </filter
    -->
        <!--添加运行时观察者实例,实现:PHPUnit_Framework_TestListener-->
        <!--listeners>
          <listener class="MyListener" file="/optional/path/to/MyListener.php">
            <arguments>
              <array>
                <element key="0">
                  <string>Sebastian</string>
                </element>
              </array>
              <integer>22</integer>
              <string>April</string>
              <double>19.78</double>
              <null/>
              <object class="stdClass"/>
            </arguments>
          </listener>
        </listeners
    -->
    </phpunit>

    加上自动部署:

    http://www.cnblogs.com/liushannet/archive/2011/07/20/2111434.html

    完美了.

  • 相关阅读:
    Vim
    一文搞定Samba云服务器配置(阿里云)CentOS8.3
    第四课 婴儿是如何思考的 思维的发展历程
    C++/VS基础篇
    Windows下Qt VS 打包程序 到他人电脑安装运行出现的问题
    第三课 斯金纳
    第二课基础 弗洛伊德
    C++中头文件和实现文件的关系
    字符串 数字 转换
    Ucore lab1实验报告
  • 原文地址:https://www.cnblogs.com/liushannet/p/2794331.html
Copyright © 2011-2022 走看看