Archive for November, 2007

Data Driven Test with PHPUnit3.2

PHPUnit 3.2的一个新特性就是支持DDT。最大的好处就是你在写与数据有关的unit test时可以少写很多代码。所谓DDT就是可以使用某已存在的数据来进行测试。比如在处理输入输出时,如果你改变了转换输入至输出的代码,那么不得不确保所有的输入数据仍是工作正确的。

在没有这个新特性之前,我们可能需要构造好整个输入及整个输出分别作为一个参数来进行assert。这种情况下你需要做大量的没有太多实际意义的代码来进行准备和处理。

而有个该新特性以后则十分方便以数据驱动的方式来进行测试(在.Net中NUnit是没有的,但mstest和xunit都具有这样的特性)。

下面是一个典型的DDT的例子,从PHPUnit的文档中取得:

class DataTest extends PHPUnit_Framework_TestCase
{
public static function provider()
{
return array(
array(0, 0, 0),
array(0, 1, 1),
array(1, 1, 3),
array(1, 0, 1)
);
}

/**
* @dataProvider provider
*/
public function testAdd($a, $b, $c)
{
$this->assertEquals($c, $a + $b);
}
}

这里有3个地方要注意,一个是static的provider方法,一个是@dataProvider的annotation,还有就是testAdd方法是带有参数的(与普通的testcase不同)。

所以此时如果我是对数据库的数据进行DDT的话,那么可以直接从数据库中取得数据后进行测试。这样的DataProvider返回的数据与MSTest中的TestContext有点相似。而除了数据库以外,常见的测试的时候我们常使用excel或csv来做输入输出数据的expect。
class DataTest extends PHPUnit_Framework_TestCase
{
public static function provider()
{
/*
$allresults = array(datarow, datarow, datarow…);
*/
return $allresults;
}

/**
* @dataProvider provider
*/
public function testLogic($datarow)
{
$this->assertEquals($expect, $targetmethod->processlogic($datarow));
}
}

Data Driver Test在自动化测试中相当的有用。所以非常非常高兴看到PHPUnit开始具有越来越丰富的功能,虽然在没有DDT之前也可以使用testsuite来做到,而且实际上PHPUnit中便是以testsuite来做到的。期待PHPUnit3.2的最终发布(当前是RC3)。

PS: 当前已经是3.2.0发布

有点创意好不好?

2年前我就抱怨过《烦不烦啊》。

一早就收到一个http://hainei.com/发来的mail,因为Avenger在那里把我加了好友。首先非常,特别以及极其严重的申明,我针对的完全是该网站,我十分而且非常的尊重且喜欢伯乐同志。还望伯乐同志一如既往的将我加为好友。上次看到伯乐在北京和easy他们的热情洋溢的火锅,看得我馋老虫都出来了。

真的是不去看不知道,一看,还以为facebook出中文版了。。。于是大清早馋老虫就被消灭了。。。

Be Social App?

Google just released their open social api, which is acted as an industry standard. Associated many companies or organizations.
http://code.google.com/apis/opensocial/

I do believe this is kind of response to the co-operation between MS and facebook. But it looks that we must consider the social elements in our applications. E.g., in blogs, we may get the blog-rolls from this kind API.

I still have no idea of how to connect the CONTENT and social App (service) (Movie, Music, News etc… From fav? From bookmark? Or from browser activity?), although I think it will bring revolution to whole internet websites.