为某些类编写PHPUnit测试我是PHPUnit的新用户


write a PHPUnit Test for some classes i am new PHPUnit user

我想为这个类编写phpunit测试

当然我知道如何执行phpunit

1000 感谢帮手:)

红外线生成器.php

<?php
/**
 * Random Generator interface
 * 
 * @package GNS
 */
interface IRandomGenerator
{
  /**
     * Get Random Byte
     * 
     * @return int 0..255 range integer
     * @throws NoMoreBytesException
     */
    public function getByte();
}
/**
 * No more bytes can be get exception
 * 
 * It can be useful if generator depends on external source
 */
class NoMoreBytesException extends Exception {}
?>

阿兰多姆发电机.class.php

<?php
/**
 * Base class for random generators
 */
require_once 'IRandomGenerator.php';
abstract class ARandomGenerator implements IRandomGenerator
{
  /**
     * Get Bytes
     * 
     * @param int $number
     * @return array Array of 0..255 range integers
     * @throws NoMoreBytesException
     */
    public function getBytes($number = 1)
    {
      $bytes = array();
      for ($i = 0; $i < $number; $i++) $bytes[] = $this->getByte();
      return $bytes;
    }

    /**
     * Get Word
     * 
     * @return int 0..65535 range integer
     * @throws NoMoreBytesException
     */
    public function getWord()
    {
      return $this->getByte() << 8 | $this->getByte();
    }

    /**
     * Get Words
     * 
     * @param int $number
     * @return array Array of 0..65535 range integers
     * @throws NoMoreBytesException
     */
    public function getWords($number = 1)
    {
      $words = array();
      for ($i = 0; $i < $number; $i++) $words[] = $this->getWord();
      return $words;
    }

    /**
     * Get Long
     * 
     * @return 4-byte integer
     * @throws NoMoreBytesException
     */
    public function getLong()
    {
      return $this->getWord() << 16 | $this->getWord();
    }

    /**
     * Get Longs
     * 
     * @param int $number
     * @return array Array of 4-byte integers
     * @throws NoMoreBytesException
     */
    public function getLongs($number = 1)
    {
      $longs = array();
      for ($i = 0; $i < $number; $i++) $longs[] = $this->getLong();
      return $longs;
    }
}
?>

文件随机生成器.class

<?php
/**
 * File random generator (reading data from file)
 * 
 * Take care of your file holds really random data
 * and contains it enough for task. Don't use the same
 * data twice
 */
require_once 'ARandomGenerator.class.php';
class FileRandomGenerator extends ARandomGenerator
{
  /** @const int Chunk to read from file */
  const CHUNKSIZE = 128;
  /** @var array $pool of data */
  private $pool = array();
  /** @var resourse Open file descriptor */
  private $fd;

  /**
   * Constructor
   * 
   * @param string $fname File name with random data
   */
  public function __construct($fname)
  {
    $this->fd = fopen($fname, 'rb');
    if ($this->fd === false) throw new NoMoreBytesException('Cannot open file: ' . $fname);
  }

    /**
     * Get Random Byte
     * 
     * @return int 0..255 range integer
     * @throws NoMoreBytesException
     */
    public function getByte()
    {
      // reading to pool
      if (count($this->pool) === 0)
      {
      if (($data = fread($this->fd, self::CHUNKSIZE)) !== false)
        $this->pool = unpack('C*', $data);
        else
          throw new NoMoreBytesException('No more data in file left');
      }
      return array_pop($this->pool);
    }
}
?>

以及任何人如何知道来自phpunit框架的函数必须用于测试每个类?

一个简单的入门方法是使用 phpunit-skelgen。此实用程序将快速为您的班级设置基本测试。

您需要阅读手册,但"tl;dr"是:

$ mkdir -pv tests/unit
$ phpunit-skelgen --test -- FileRandomGenerator FileRandomGenerator.class.php ' 
  FileRandomGeneratorTest tests/unit/FileRandomGeneratorTest.php