Bashar Gh
Bashar Gh

Reputation: 57

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

i want to write phpunit test for this classes

and sure I know how to execute phpunit

1000 thanks for helper :)

IRandomGenerator.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 {}
?>

ARandomGenerator.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;
    }
}
?>

FileRandomGenerator.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);
    }
}
?>

and how the anyone to know what the function from phpunit framework must to use for test each class ?

Upvotes: 0

Views: 825

Answers (1)

BryanH
BryanH

Reputation: 6062

One easy way to get started is to use phpunit-skelgen. This utility will quickly set up a bare-bones test for your class.

You will want to read the manual, but a "tl;dr" is:

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

HTH

Upvotes: 1

Related Questions