For my whole life I have written about 2700 unit tests. For example here are about 1300 unit-tests and code coverage is almost 100%.
I am not the most skillfull person but I have some tricks wich helpms to write more tests and easier maintain them. Hope they will be usefull for you.
Examples will be written for PHPUnit and PHP but you can implement all advices for any other unit-testing framework for any language you want.
Strict structure for all unit-tests
All my tests have absolutely the same structure (excepti for tests wich test exception )) ) and it looks like this:
// setup here we have setup commands // test body here we call testing method // assertions here we validate the result
And here is some real life example:
/** * Testing method addPostRoute */ public function testAddPostRoute(): void { // setup $router = $this->getRouter(); $route = 'route'; RouterUnitTestUtils::setRequestMethod('POST'); // test body $router->addPostRoute($route, $this, 'actionRoute'); // assertions $this->assertEquals(1, $router->callRoute($route)); }
Here strict structure of unit-test will help you easyly understand what is happening. And also prevents your tests from becoming a mess.
In some cases unit-test's structure can be a little different, but it consists of the same three parts: setup, test body and assertions. Just look at hte example:
/** * Testing exception while getting existing file */ public function testExceptionWhileGettingFileContent(): void { // assertions $this->expectException(\Exception::class); $this->expectExceptionCode(- 1); $this->expectExceptionMessage('File unexisting does not exists'); // setup InMemory::clearFs(); // test body Layer::existingFileGetContents('unexisting'); }
This trick can be used for Selenium tests also, but it can be modified like this:
// prepare test data // move our web app to the necessary state // test body // assertions
Here "move our web app to the necessary state" are steps wich need to be perfomed before testing functionality. For example you want to display data grid. So your selenium test will look like this (in pseudo code):
// prepare test data create records for the grid create testing user grant permissions for him // move our web app to the necessary state login with the created user open menu // test body click on the link in the menu to open testing grid // assertions verify that all created records are displayed
That's all for now. Hope this article will be usefull for you. If so - please press "STAR" for my project.
Top comments (0)