PHPUnit mock一个对象实例及其代码!

| November 4, 2008 20:05 | root | Via 本站原创
文件:
         a.php  b.php  
         aTest.php

a.php:


<?php
class a
{
  private $inHandle;
    public function getHandle($handle='')
    {  
        if ('' != $handle)
        {  
            $this->inHandle = $handle;
            return ;
        }  
        elseif ('' != $this->inHandle)
        {  
            return;
        }  
        $this->inHandle = new b();
        return;
    }
  public function use_b_class($num)
  {  //调用b类的:need_mock方法,假如是外部资源,为此需要mock
    $value = $this->inHandle->need_mock($num);
    $result = $value;
    return $result;    
  }  
}
?>



b.php



<?php
class b
{  protected $a = 0;
  protected $b = 0;
  public function __construct($a,$b)
  {
    $this->a = $a;
    $this->b = $b;
    echo $this->b;    
  }
  public function  need_mock($a)
  {
    $b = $this->a+$a;
    return $b;
  }
}
?>


aTest.php

<?php
require_once 'a.php';
require_once 'b.php';
require_once 'PHPUnit/Framework/TestCase.php';
/**
* a test case.
*/
class aTest extends PHPUnit_Framework_TestCase {  
  /**
   * @var a
   */
  private $a;  
  /**
   * Prepares the environment before running a test.
   */
  protected function setUp() {
    parent::setUp ();    
    // TODO Auto-generated aTest::setUp()
    $this->a = new a(/* parameters */);
  }  
  /**
   * Cleans up the environment after running a test.
   */
  protected function tearDown() {
    // TODO Auto-generated aTest::tearDown()
    $this->a = null;    
    parent::tearDown ();
  }
  
  /**
   * Constructs the test case.
   */
  public function __construct() {
    // TODO Auto-generated constructor
  }
  
  /**
   * Tests a->getHandle()
   */
  public function testGetHandle() {
    // TODO Auto-generated aTest->testGetHandle()
    $this->markTestIncomplete ( "getHandle test not implemented" );    
    $this->a->getHandle(/* parameters */);  
  }
  
  /**
   * Tests a->use_b_class()
   */
  public function testUse_b_class() {
    // TODO Auto-generated aTest->testUse_b_class()
    //$this->markTestIncomplete ( "use_b_class test not implemented" );
    
    //$this->a->use_b_class(/* parameters */);
    $a = array(1,"第二个参数");//注意:必须传array(构造函数参数1,构造函数参数2,构造函数参数3)
    $stub = $this->getMock('b', array('need_mock'),$a);
        $stub->expects($this->any())
             ->method('need_mock')
             ->with(      
                   $this->equalTo( 1 )//传入一个参数
                   )
             ->will($this->returnValue(11));//设定返回为11
        $this->a->getHandle($stub);//传入经过mock的对象      
        echo $this->a->use_b_class(1);
        $this->assertEquals($this->a->use_b_class(1) , 11 );
        $this->assertEquals(array(array(0,1,2)),array(array(0,1,2)));//必须是所谓的二维数组,否则出错
  
  }

}



听传说是中科院研究出鸡饲料,现在开始研究人了:
0~~5岁,
女人:妈妈.
男人:妈妈.
6~~10岁:
女人:不是讨厌的男孩就行.
男人:能和我一起欺负其它人的男孩.
11~~15岁:
女人:十六七八九岁的大男孩,只要不是本班的那一帮就行.
男人:篮球,足球,乒乓球,网球......
16~~25岁:
女人:26岁至29岁的有事业基础,有品位,有才华的男人.
男人:20岁至24岁的漂亮,有身段的女人.
25~~30岁:
女人:坚持要比自己大的男人.
男人:20岁至24岁的漂亮,有身段的女人
30~~40岁:
女人:心灵契合的男人.
男人:20岁至24岁的漂亮,有身段的女人
40~~50岁:
女人:男人.
男人:20岁至24岁的漂亮,有身段的女人
50~~60岁:
女人:能和她终老的男人.
男人:20岁至24岁的漂亮,有身段的女人.
60~~70岁:
女人:和他在一起,需要自己照顾的男人,
男人:20岁至24岁的漂亮,有身段的女人.
70~~80岁:
女人:和他在一起,不需要自己照顾的男人
男人:20岁至24岁的漂亮,有身段的女人.
80~~90岁:
女人:死在自己后面的男人.
男人:我虽然已经老眼昏花.不过我还是希望20岁至24岁的漂亮,有身段的女人.
结论:男人是专一的  

仁者见仁,智者见智来源,觉得挺有意思。。。

| November 4, 2008 15:58 | root | Via 本站原创
〖解释〗仁者见它说是仁,智者见它说是智。比喻对同一个问题,不同的人从不同的立场或角度有不同的看法。
〖出处〗《周易·系辞上》:“仁者见之谓之仁,智者见之谓之智。”
〖示例〗俗话说:~,所以我们对这些人的看法应该理解。

【原文】


一阴一阳之谓道。继之者善也,成之者性也。仁者见之谓之仁,知者见之谓之知。百姓日用而不知,故君子之道鲜矣①。显诸仁,藏诸用,鼓万物而不与圣人同忧,盛德大业至矣哉!富有之谓大业。日新之谓盛德。生生之谓易②。成象之谓乾。效法之谓坤。极数知来之谓占③。通变之谓事。阴阳不测之谓神。


【注释】


①鲜:少,这里指很少有人了解。②日新:不断更新。生生:变化不止.③极数:穷尽卦、交的变化。


【译文】


阴阳的交替变化就叫做道。相继不断就是善,成就万物的是性。仁者从自己的角度看,把它叫做仁;智者从自己的角度看,把它叫做智。平民百姓每天接触阴阳之道而不懂得,因此君子之道就很少有人知道了。它表现出来就是仁,隐藏起来就是用,鼓动万物,不与圣人共同劳神忧虑,它的崇高品德和伟大业绩达到了顶点。拥有万物就叫伟大业绩。不断更新就叫崇高品德。变化不止就叫易。生成物象就叫乾。仿效乾而完成物象就叫坤。穷尽卦支而预知未来就叫占问。承接更新就叫事。阴阳交替不可把握就叫神奇。


【读解】


《系辞》的作者在这一节里阐发自己对“道”的看法,认为宇宙万物产生的根源在于“道”,即阴与阳的交替变化。道的变化是 无穷无尽的,道也无所不在,却难以把握,只有圣人君子才能完全领悟。
这些抽象的议论都在表达一种宇宙观,一种哲学思想,难怪晋通百姓不大搞得清楚。不过,如果不要说得那么高深,”百姓还是可以懂的。比如生命,来自于雌、雄的结合。比如花朵,生于阳光和土壤。比如时光,由白天和黑夜构成。这就是阴阳交替结合产生万物。
阴阳观具有中国特色,深入咱们心里,我们自古以来就用它看待和解释世界上的万事万物。

51单片机串口通信

| November 4, 2008 10:26 | root | Via 本站原创
程序:

1 接收程序


#include<REG51.h>



void init(void)
{
TMOD=0x20;
TH1=0xE8;
TL1=0xE8;
PCON=0x00;
TR1=1;
SCON=0x50;
}


void checkout(unsigned int para)
{   unsigned int paracheck=para;
redo:   if(SBUF!=paracheck)
        SBUF=0xFF;
     while(TI==0);
  TI=0;
  while(RI==0);
  RI=0;
        if(SBUF!=paracheck)
  goto redo;
  
      else SBUF=0xBB;
  while(TI==0);
  TI=0;



}


void ledflash(unsigned char flashnum)
{
   unsigned char i,k;
   for(i=flashnum;i>0;i--)
     for(k=200;k>0;k--)
  {
  ;
  P0=0x00;
  P0=0xFF;
     }
}



void get()
{  unsigned int getnum;
  while(RI==0);
  RI=0;
  while((getnum=SBUF)!=0xCC)
  {
  if(getnum%4==0)
    {ledflash(getnum);
       SBUF=0xBB;
    goto check;}
  else
     SBUF=0xFF;
check: while(TI==0);
  TI=0;
     while(RI==0);
      RI=0;
}

}





void ledon()
{
P0=0x00;
P0=0xFF;
}


void ledoff()
{
P0=0xFF;
P0=0x00;
}



void main(void)
{

while(1)
{
init();
checkout(0xAA);
ledon();
get();
checkout(0xCC);
ledoff();
}
}



2 发送程序


#include<REG51.h>






void init(void)
{
TMOD=0x20;
TH1=0xE8;
TL1=0xE8;
PCON=0x00;
TR1=1;
SCON=0x50;

}




void checkout(unsigned int para)
{   unsigned int paracheck;
           paracheck=para;
redo:      SBUF=paracheck;
     while(TI==0);
     TI=0;
     while(RI==0);
     RI=0;
     if(SBUF!=0xBB)
     goto redo;
}



void sent(void)
{unsigned char i;
      checkout(0xAA);

    
  
   for( i=0;i<20;i++)
    {
   if(i%4==0)
           checkout(i);
        }      

      checkout(0xCC);
}



void ledon(void)
{
P0=0x00;
P0=0xFF;

}

void ledoff(void)
{

P0=0x00;
}




void main()
{
while(1)
{
init();
ledon();
sent();
ledoff();
};


}

C读写串口,编译通过,root运行OK

| November 3, 2008 15:43 | root | Via 本站原创

int openport(char *Dev) //打开串口

int setport(int fd, int baud,int databits,int stopbits,int parity)//设置串口,波特率,数据位,停止位,校验

int readport(int fd,char *buf,int len,int maxwaittime)//读数据,参数为串口,BUF,长度,超时时间

int writeport(int fd,char *buf,int len)  //发送数据

void clearport(int fd)      //如果出现数据与规约不符合,可以调用这个函数来刷新串口读写数据


#include   <stdio.h>  
#include   <string.h>  
#include   <unistd.h>  
#include   <fcntl.h>  
#include   <errno.h>  
#include   <termios.h>  
#include   <sys/time.h>
int openport(char *Dev)  
{
int fd = open( Dev, O_RDWR|O_NOCTTY|O_NDELAY );
if (-1 == fd)
{    
  perror("Can''t Open Serial Port");
  return -1;  
}
else
  return fd;

}  
  
int setport(int fd, int baud,int databits,int stopbits,int parity)
{
int baudrate;
struct   termios   newtio;  
switch(baud)
{
case 300:
  baudrate=B300;
  break;
case 600:
  baudrate=B600;
  break;
case 1200:
  baudrate=B1200;
  break;
case 2400:
  baudrate=B2400;
  break;
case 4800:
  baudrate=B4800;
  break;
case 9600:
  baudrate=B9600;
  break;
case 19200:
  baudrate=B19200;
  break;
case 38400:
  baudrate=B38400;
  break;
default :
  baudrate=B9600;  
  break;
}
tcgetattr(fd,&newtio);    
bzero(&newtio,sizeof(newtio));  
   //setting   c_cflag
newtio.c_cflag   &=~CSIZE;    
switch (databits) /*设置数据位数*/
{  
case 7:  
  newtio.c_cflag |= CS7; //7位数据位
  break;
case 8:    
  newtio.c_cflag |= CS8; //8位数据位
  break;  
default:  
  newtio.c_cflag |= CS8;
  break;    
}
switch (parity) //设置校验
{  
case 'n':
case 'N':  
  newtio.c_cflag &= ~PARENB;   /* Clear parity enable */
  newtio.c_iflag &= ~INPCK;     /* Enable parity checking */
  break;
case 'o':  
case 'O':    
  newtio.c_cflag |= (PARODD | PARENB); /* 设置为奇效验*/
  newtio.c_iflag |= INPCK;             /* Disnable parity checking */
  break;
case 'e':
case 'E':  
  newtio.c_cflag |= PARENB;     /* Enable parity */  
  newtio.c_cflag &= ~PARODD;   /* 转换为偶效验*/    
  newtio.c_iflag |= INPCK;       /* Disnable parity checking */
  break;
case 'S':
case 's':  /*as no parity*/  
     newtio.c_cflag &= ~PARENB;
  newtio.c_cflag &= ~CSTOPB;break;
default:  
  newtio.c_cflag &= ~PARENB;   /* Clear parity enable */
  newtio.c_iflag &= ~INPCK;     /* Enable parity checking */
  break;  
}
switch (stopbits)//设置停止位
{  
case 1:  
  newtio.c_cflag &= ~CSTOPB;  //1
  break;
case 2:  
  newtio.c_cflag |= CSTOPB;  //2
    break;
default:
  newtio.c_cflag &= ~CSTOPB;
  break;
}
newtio.c_cc[VTIME] = 0;  
newtio.c_cc[VMIN] = 0;
newtio.c_cflag   |=   (CLOCAL|CREAD);
newtio.c_oflag|=OPOST;
newtio.c_iflag   &=~(IXON|IXOFF|IXANY);                    
    cfsetispeed(&newtio,baudrate);  
    cfsetospeed(&newtio,baudrate);  
    tcflush(fd,   TCIFLUSH);
if (tcsetattr(fd,TCSANOW,&newtio) != 0)  
{
  perror("SetupSerial 3");
  return -1;
}
return 0;
}
int readport(int fd,char *buf,int len,int maxwaittime)//读数据,参数为串口,BUF,长度,超时时间
{
int no="0";int rc;int rcnum="len";
struct timeval tv;
fd_set readfd;
tv.tv_sec=maxwaittime/1000;    //SECOND
tv.tv_usec=maxwaittime%1000*1000;  //USECOND
FD_ZERO(&readfd);
FD_SET(fd,&readfd);
rc=select(fd+1,&readfd,NULL,NULL,&tv);
if(rc>0)
{
  while(len)
  {
   rc=read(fd,&buf[no],1);
   if(rc>0)
    no=no+1;
   len=len-1;  
  }
  if(no!=rcnum)
   return -1;      //如果收到的长度与期望长度不一样,返回-1
  return rcnum;      //收到长度与期望长度一样,返回长度
}
else
{
  return -1;
}
return -1;
}
int writeport(int fd,char *buf,int len)  //发送数据
{
write(fd,buf,len);
}
void clearport(int fd)      //如果出现数据与规约不符合,可以调用这个函数来刷新串口读写数据
{
tcflush(fd,TCIOFLUSH);
}
main()  
{  
int   fd,rc,i,ret;  
unsigned char rbuf[256];
unsigned char wbuf[256]="";
for(i=0;i<256;i++)
  wbuf[i]=i;
char *dev ="/dev/ttyS0";    //串口号 /dev/ttyS0  对应于串口1
    fd  =  openport(dev);     //打开串口
if(fd>0)
{
  ret=setport(fd,4800,8,1,'o');  //设置串口,波特率,数据位,停止位,校验
  if(ret<0)
  {
   printf("Can't Set Serial Port!\n");
   exit(0);
  }
}
else
{
  printf("Can't Open Serial Port!\n");
  exit(0);
}
while(1){
  rc=readport(fd,rbuf,5,500);   //读取5个字节,超时时间为500毫秒
  if(rc>0)
  {
   writeport(fd,wbuf,rc);
   printf("recv:%d\n",rc);
   for(i=0;i<rc;i++)
   printf("%02x ",rbuf[i]);
   printf("\n");
  }
  else
   printf("recv none\n");
}  
close(fd);  
}  
分页: 10/259 第一页 上页 5 6 7 8 9 10 11 12 13 14 下页 最后页 [ 显示模式: 摘要 | 列表 ]