php - 为某些 classes PHPUnit用户的类编写PHPUnit测试

  显示原文与译文双语对照的内容
0 0

我想为这个类写phpunit测试

而且我也知道如何执行 phpunit

1000感谢你的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);
 }
}
?>

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

时间: 原作者:

0 0

开始的一个简单方法是使用 phpunit-skelgen 。 这个工具将快速为你的类设置一个裸骨骼测试。

你需要阅读本手册,但"dr ;博士"是:


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

HTH

原作者:
...