SimpleTest conversion: Difference between revisions
From MoodleDocs
No edit summary |
|||
Line 1: | Line 1: | ||
{{Moodle 2.3}} | |||
=Overview= | =Overview= | ||
Moodle 2.3 switched to PHPUnit as the recommended unit testing framework. SimpleTest support will be completely removed from Moodle 2.4. | |||
The migration is pretty straightforward: | The migration is pretty straightforward: |
Revision as of 20:17, 23 April 2012
Moodle 2.3
Overview
Moodle 2.3 switched to PHPUnit as the recommended unit testing framework. SimpleTest support will be completely removed from Moodle 2.4.
The migration is pretty straightforward:
- create new test file in `xxx/tests/yyy_test.php`
- copy contents of the old test file
- replace
extends UnitTestCase
withextends basic_testcase
andextends UnitTestCaseUsingDatabase
withextends advanced_testcase
- move constructor code to setUp()
- fix setUp() and tearDown() to be protected
- fix assert syntax
- add
$this->resetAfterTest();
in advanced test cases that modify database - add missing
global $CFG;
for includes outside of testcase classes
Usually the tests using database can be significantly simplified, the performance in PHPUnit is also a lot better.
Assert differences
SimpleTest | PHPUnit | Notes |
---|---|---|
$this->assertEqual($expected, $actual)
|
$this->assertEquals($expected, $actual)
|
|
$this->assertNotEqual($expected, $actual)
|
$this->assertNotEquals($expected, $actual)
|
|
$this->assertWithinMargin($expected, $actual, $margin)
|
$this->assertEquals($expected, $actual, , $margin)
|
|
$this->assertIdentical($expected, $actual)
|
$this->assertSame($expected, $actual)
|
|
$this->assertNotIdentical($expected, $actual)
|
$this->assertNotSame($expected, $actual)
|
|
$this->assertTrue($actual)
|
$this->assertTrue((bool)$actual) $this->assertNotEmpty($actual)
|
SimpleTest converts parameter to bool |
$this->assertFalse($actual)
|
$this->assertFalse((bool)$actual) $this->assertEmpty($actual)
|
SimpleTest converts parameter to bool |
$this->assertIsA($actual, 'classname')
|
$this->assertInstanceOf('classname', $actual)
|
objects instances only |
$this->assertIsA($actual, 'array')
|
$this->assertEquals('array', gettype($actual))
|
arrays only |
$this->assertPattern($pattern, $string)
|
$this->assertRegExp($pattern, $string)
|
|
$this->assertNoPattern($pattern, $string)
|
$this->assertNotRegExp($pattern, $string)
|
|
$this->expectException(true)
|
$this->setExpectedException('exception_classname')
|
alternatively use phpdocs: @expectedException exception_classname |
$this->expectError()
|
$this->setExpectedException('PHPUnit_Framework_Error')
|
alternatively use phpdocs: @expectedException PHPUnit_Framework_Error |
various HTML expectations | $this->assertTag()
|
SimpleTest emulation
Some original SimpleTests can be executed directly via PHPUnit with minimal modifications (try adding global $CFG for includes outside of test case class).