php单测mock数据库 php单元测试工具( 二 )


如果SomeClass为单例,phpunit将会提示
Call to private SomeClass::__construct() from context 'PHPUnit_Framework_TestCase'
这时,我们的测试该如何进行呢?
解决:
仍然使用getMock进行模拟 。
只要将其第5个参数设为false即可 。其含意是:不调用原对象的构造函数 。
[php] view
plaincopyprint?
$stub = $this-getMock('SomeClass', array(), array(), '', false);
$stub = $this-getMock('SomeClass', array(), array(), '', false);
不得不说,这样使用有点复杂 。
如果你使用的是phpunit3.5及以上版本提供了更易用的api,你可以这样禁掉对原有constructor方法的调用 。
$stub=$this-getMockBuilder('SomeClass')-disableOriginalConstructor()-getMock();
附:
对getMock的6个可选参数的详解 , 
手册中并未提及它们的默认值,经测试得到结果如下:
array(), array(), '', false, false, false

$stub=$this-getMockBuilder('SomeClass')
等同于:
$stub=$this-getMockBuilder('SomeClass',array(), array(), '', true, false, false)
php单元测试怎么写写过JAVA和C++的单元测试,PHP,没必要也没写过 。单元测试主要是对核心的类和方法进行测试,在J2EE开发中 , 由于各种配置比较繁琐,并且是分层开发,所以很有必要写单元测试 。比如,我做了一个service,我就可以针对这个service写个单元测试 , 取出这个bean,来验证是否正常 , 而不必等到ACTION层写好后,配置完整再来测试 。对J2EE来说,service正常后,ACTION我就不用管了 。做单元测试也容易提早发现问题 。并且eclipse自带了iunit,使用极其方便 。C++也一样,流程比较复杂,为了尽快验证和发现问题,有做单元测试的必要 。而PHP这类脚本,不需要 。我也很少见人提到过php的单元测试 。本身逻辑就不复杂,而且大多数也不分层 。NETBEAN自带了phpunit,不过从没用过如果还有不明白的话 , 你可以在后盾人看看视频找找答案 , 有空多看看时间长了 , 慢慢就明白了,希望能帮到你,给个采纳吧谢谢???!(??????)??
如何使用Mock来测试Files,Database和ContentProviders首个先我们创建一个应用,功能很简单就是读取该应用目录下的一个txt文件内容,并展示到应用的activity上 。
public class MockContextExampleActivity extends Activity {
public final static String FILE_NAME = “myfile.txt”;
private TextView mTv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTv = (TextView) findViewById(R.id.TextView01);
final byte[] buffer = new byte[1024];
try {
final FileInputStream fis = openFileInput(FILE_NAME);
final int n = fis.read(buffer);
mTv.setText(new String(buffer, 0, n-1));
} catch (Exception e) {
mTv.setText(e.toString());
mTv.setTextColor(Color.RED);
}
}
//这里写了个getText方法 , 测试工程会用到 。
public String getText() {
return mTv.getText().toString();
}
运行一下 , 此时我们的包目录下没有myfile.txt,页面显示的可能是个错误 。OK,然后我们创建两个文件 。一个名为myfile.txt,一个test.myfile.txt 。前者用于应用中显示的文件内容,后者是作为测试Mock调用的 。
echo “This is real data” data/data/com.example.aatg.mockcontextexample/files/myfile.txt
echo “This is *MOCK* data” data/data/com.example.aatg.mockcontextexample/files/test.myfile.txt
再次运行下,应该可以看到Activity上显示的是This is real data 。
OK,下面开始编写测试代码 。我们的目的是测试这个app能够正确读取文件,假设现在我怕是不是开发在代码里写死了“This is real data”这句话(作为测试,有点怀疑精神很正常) 。OK,现在我用另外一个文件test.myfile.txt来代替myfile.txt会不会出错 。

推荐阅读