The State of PHPUnit

Video in TIB AV-Portal: The State of PHPUnit

Formal Metadata

The State of PHPUnit
Alternative Title
Php And Friends - The state of phpunit
Title of Series
CC Attribution 2.0 Belgium:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Release Date
Production Year

Content Metadata

Subject Area
Goodness of fit Execution unit Quantum state
Arm Software Quantum state
Point (geometry) Trail Game controller Java applet Multiplication sign Patch (Unix) Execution unit Student's t-test Mereology Metadata Formal language Number Revision control Stationary state God Gamma function Software developer Projective plane Bit Unit testing Limit (category theory) Quantum state Process (computing) Universe (mathematics) Speech synthesis Thomas Bayes
Building Presentation of a group Beta function Multiplication sign Execution unit Set (mathematics) Disk read-and-write head Mereology Semantics (computer science) Facebook Mechanism design Mathematics Process (computing) Logic gate 5 (number) Stability theory Scripting language Beta function Software developer Feedback Quantum state Process (computing) Pattern language Alpha (investment) Sinc function Ocean current Computer file Software developer Feedback Patch (Unix) Virtual machine Branch (computer science) Online help Field (computer science) Twitter Attribute grammar Number Revision control Frequency Software testing Stationary state Alpha (investment) Installation art Addition Distribution (mathematics) Projective plane File archiver Speech synthesis Musical ensemble
Code INTEGRAL Multiplication sign Execution unit Parameter (computer programming) Function (mathematics) Disk read-and-write head Information technology consulting Front and back ends Expected value File system Software framework Error message Social class Exception handling Service (economics) Moment (mathematics) Sampling (statistics) Sound effect Unit testing Front and back ends Quantum state Type theory Process (computing) Telecommunication Software testing Right angle Writing Asynchronous Transfer Mode Point (geometry) Asynchronous Transfer Mode Game controller Functional (mathematics) Service (economics) Open source Real number Disintegration Expert system Code Frequency Touch typing Energy level Software testing Proxy server Task (computing) Default (computer science) Projective plane Line (geometry) Limit (category theory) Uniform resource locator Software Function (mathematics) Speech synthesis Object (grammar)
Asynchronous Transfer Mode Computer file Code INTEGRAL Patch (Unix) Multiplication sign Disintegration Execution unit Average Mereology Frequency Software testing Traffic reporting Default (computer science) Information Patch (Unix) Software developer Projective plane Line (geometry) Quantum state Revision control Configuration space output Speech synthesis Software testing Metric system Asynchronous Transfer Mode Library (computing)
Addition Asynchronous Transfer Mode Addition Patch (Unix) Forcing (mathematics) Connectivity (graph theory) Disintegration Execution unit Range (statistics) Control flow Average Mereology Quantum state Revision control Frequency Fluid statics Personal digital assistant Case modding Speech synthesis Software testing Hill differential equation Software testing Series (mathematics) Tunis
Hoax Execution unit Real-time operating system Expected value Object (grammar) Forest Social class Exception handling Collaborationism Touchscreen Theory of relativity Constructor (object-oriented programming) Sound effect Bit Maxima and minima Image registration Instance (computer science) Complete metric space Quantum state Radical (chemistry) Arithmetic mean Quicksort Figurate number Reading (process) Point (geometry) Web page Addition Connectivity (graph theory) Branch (computer science) Online help Student's t-test Code Number Frequency Latent heat Crash (computing) Factory (trading post) Selectivity (electronic) Data structure Computer-assisted translation Stationary state Traffic reporting Form (programming) Default (computer science) Pairwise comparison Focus (optics) Generic programming Counting Basis <Mathematik> Cartesian coordinate system Cursor (computers) Personal digital assistant Function (mathematics) Universe (mathematics) Case modding Revision control Iteration Library (computing) State observer Constructor (object-oriented programming) Code INTEGRAL Multiplication sign Direction (geometry) Set (mathematics) Instance (computer science) Image registration Parameter (computer programming) Counting Mereology Formal language Mathematics Cuboid Software framework Area Moment (mathematics) Variable (mathematics) Flow separation Exterior algebra Fluid statics Computer configuration Uniformer Raum Configuration space Fundamental theorem of algebra Functional (mathematics) Implementation Real number Theory Revision control Flow separation Internetworking Gastropod shell Software testing Mathematical optimization Addition Projective plane Doubling the cube Speech synthesis Object (grammar)
Web page Suite (music) Statistics Code Java applet Feedback Multiplication sign Connectivity (graph theory) 1 (number) Archaeological field survey Similarity (geometry) Function (mathematics) Stack (abstract data type) Mereology Element (mathematics) Formal language Frequency Workload Goodness of fit Different (Kate Ryan album) Damping Software framework Software testing Information security Traffic reporting Domain name Distribution (mathematics) Matching (graph theory) Graph (mathematics) Projective plane Feedback Shared memory Parallel port Flow separation Quantum state Type theory Arithmetic mean Process (computing) Order (biology) Revision control Right angle Object (grammar)
the next with tool thank you the we have a clear picture of that be if b good morning OK at the back good not making and not being made fun of like the previous speaker so that's good um apparently I have not the 1st clue what I'm going to talk about here today because according to the back a local community has no reputation on each unit some but hopefully that is going to change soon so high and some of them I've been doing
things with PHP and to a PHP for the a lot of years now I I started in 98 99 back in the dark ages of 3 and missed PFI the the and this thing and do that for that and nowadays I held teams on to successfully craft the right software that makes there this is happy the customers happy and so on I do this with the
cost of his arms the company that have found a couple of years ago together with friends and also actively PHP commuting and that's much advertising that going to get from me
so the state of PHP units is something that by I like to talk about usually in the hallway track of conferences and for the 1st time trying as any real annotation so let's look at the back a little bit of history of the project and what we've done over the last 12 months and will soon to come because next week is once again really sweet but more on the new release process in the limit so looking at the past this is
the oldest evidence in losing control I can find for PHP unit I don't remember when exactly I started to work on HP units it was about at least half a year before that initial coming back then it was still CBS which at some point but converted to subversion which at some point but converted to get yes so the summer of 2001 around that time um I was exposed to to j units and unit testing and Kathryn development at university was really lucky that had a professor who was friends with its gamma uh and also you can't back and introduced his students me including but to to J-unitary early on he knew that there was doing things as speech at a time and he said I see that you're really excited about J. unit and unit testing and PHP doesn't have that will you come over a 2 to John because we have to store it said no there's no reason to switch the language because I like this language much better than Java somebody just has to the tool so the that's how it all started fast forward a couple of years these are not in the car and numbers but I'm not sure that they changed over the last week and then I created them so you for a lot of really really really long time back when th the unit was still developing CBS and then subversion I am a small as the only contributor or the only person working on it I got some patches along the way but bayes metadata about who made this patch and when I've got lost along the way because we didn't have that's a possibility and without Ahmadis which a version control system only when I move development of his to get up and get a couple of years ago the number of people working on it increased dramatically and it's more less people that sent to was 3 patches to fix the particular but I'm but over the years people like just so on Michael lively contributed significant parts of speech unit so thank God it's not just me anymore so what happened in recent
history but I'm not going back all the way to the beginning of going back as far as September 2012 which was manned the 3 7 came up the and I don't remember any of the new features that are introduced in between and 3 7 off the top of my head but the 2 important things that happened is that version of each unit was that for the 1st time that well over 2 additional distribution mechanisms installation methods supported by official EU are supported by the pitch period project other than the pear installer was the 1st time a teacher who could be installed using composer was the 1st time that we were able to package peach unit at the huge archive as a far single file that contains all that you need to run TGP so that was between 3 7 about a year ago and pitch period for came out which had some major new features but that was not really what warranted uh bump in the major version number but the change among other things the reuse process before it's usually took 2 2 2 and a half years for new version this new features of pitch period to come up which was way too long so let's to a couple of yeah kind of broken . 0 releases that because people don't test release candidates they wait for the final version and and only then try it and then complain that nobody test that's the reason the reason that it and so that's what the changes pitch period for since PHP unit for as a new version of pitch period every and weeks and kind of at the same time in the human for came out we announced that by the end of the year at the end of 2014 we would shut down and the pair the pitch and of the patterns of speech unit and I was really scared on December 31st last year when I turn it off because I expected a major ship starts to happen but nothing although there is still on average Monday to Friday 10 thousand downloads of PHP unit per day while the pair channel nobody complaint I have no idea how that matches those 10 thousand downloads per day there not using underpants non-natively it was just and chef or puppet scripts recipes that downloaded the Todd archives of the pair distribution and edited something with that and about 2 months before the final set of I saw that it was still that much of attribute units and I don't know what we as a project could have done more obvious communicating that they're going to shut itself so as a last resort and made 1 final release of pitch period as a pair package that did nothing but just die on the command line tell you you install the version of the period that does not work if you want a version of works use the newer and distribution mechanisms that did not help but apparently finally shut it off help there was no no backlash not outraged everything went smoothly and so surprised but some OK so we Chanterie's process and teacher units we starting a speech unit for follow semantic version a new stable release with new features is released every 2 months which makes it much more interesting for our new developers to contribute new features before it was really frustrating you have worked on this new fancy new features and the patch was accepted and then if there had just been a new release you probably have to wait 1 half or 2 years to get pure feature into stable release so people can actually use it that was very frustrating for everyone involved and that's what why be completely changed so news data released every 2 months the support for the field for a for ends and pitch period for a 5 comes out so there's no support no but fixing forbidden if work for on speech unit of work by this out the the support for PHP unit for below the guarantee for at least a full 12 months of the pitch period 5 is released stable releases of speech been and armed in addition to packages they down the very can manage it uh let composer steric far archives are archived at this uh these your else this assuming to the current stable release at finer Peachtree adopt these flesh teaching the far just downloaded run it and you have everything you need for units as part of the release process every 2 months just when the newspaper that Greece has just been published we create a new branch for the next version and every nite we take the current state of that branch and release it as an IT better-quality built which you can download from far PHP abilities last speech human that they had a far now here's the thing we've been doing these nightly builds the almost a year now and so far only gotten 1 feedback based on these monthly bills which is why last week I raised the question but in the ghetto to gates and on Twitter and whether or not having this phase actually makes sense if we don't get any feedback out of it then why go but we already went through the trouble about a year ago when we set up to build automation for this so there is in no in trouble involved right now because the machine just keeps happy building on the packages every nite but why do this if nobody actually and there's some interesting discussion going on there so maybe the keep them maybe to get rid of on and the chariot and also every nite there are bills from master what's currently being worked on so new features are developed in future branches and features ready the future branches much them off a branch and every nite is an alpha quality build you can download the far and to play now for those we actually do get feedback so that's that's something it's useful so to give an overview of these fields for a 4 is the current really serious it became stable on December 5th pitch period for a 5 is currently in beta it will go stable on Friday the band on friday we start the stabilization Facebook he's been for at 6 and it should become stable on April the so every 2 months 1st Friday Boston and if the new stable release the and is that we actually had a good experience last last a day of the week makes it much less likely for people to to install something and then go off of it and and break everything so the present
the well teach for it only came out in March 2014 it's brought among other things support for education the which from time to time is broken which is why on travesties still excluding it from from the book sometimes it works sometimes it doesn't so she looks confused and confuse most of the time of and at the moment I don't care enough about 8 of them to invest serious time into figuring out why it doesn't work the we yeah I know that's good so new feature test proxies for more effective integration testing this and really cool feature if you're writing integration level tests on using PHP units not every test that you write a speech unit is the unit test and not every test you write a speech unit must be the unit for integration tests are not that they're good and test proxies make them come much more convenient and effective to right so consider you have on a class like like the sample workflow class which integrates with the backend as a service and the something repressed object and you want to make sure in integration testing not in the unit test at the rights objects communication happen so in a unit has this would be really simple we would create stops and locks of all collaborating uptake of the request of the service of of the back and and have our dictations head of everything is fine but for integration test we want the actual code to be executed and not to be stepped up and is where test proxies come into play it's the same syntax as if you're using a mock object you can say for this test to be successful I want this method called is these arguments and everything to happen on this object but please actually execute the real code because I'm integration test and not in the unit test and that's test proxies the simplified so understanding of return values using the will return syntax which was actually a pull request that had been lingering around 4 and one-half years it was merged one-half years before this talks that long to get converge now if something like this would be available to our users within a which is really quite and so before you have to use this these 3 lines of code if you just want to stop something and this restriction for over and forwards just need align makes it easier to read because we're not expecting anything just setting up of stock return strict modes on as people outside of Germany call the German mode which is still a feature that I would at some points really like to turn on by the default I know that's very German of me to look at location detectives well I don't give me ideas so a really really long time ago I was doing a lot of lot of tests reviews of those at test speeds for open source projects to help the community uh adopt best practice and hand here you using the tool not as effectively as you put it the test doesn't have anything useful could be re written like this to be what would you from of course in in my daily work as a consultant I do this all the time and I was getting really really annoyed about seeing the same problems as in test code over and over and over again and at whenever I get annoyed by something I tried to solve it and the future of pitch period is at least as long as it's really the best thing so what I did was at the 1st feature of strict mode which and gives you a slap on the wrist and if you have a test that doesn't test think that was the 1st thing that was in there if you write a task that has no assertion that has no expectation a mock object has no expectation on an exception that has to be raised by the code and the test then the test clearly does not have anything and should not be considered useful and should also not use code-coverage which was sold to the tipping point that brought me over the edge of implementing this feature was looking at 1 test far than framework very running just this 1 test yielded 40 % code covered for the entire framework and they must know test whatsoever and it was just let's try to run as much execute as much code as possible without feeling and perfected get 40 per cent code coverage for the entire project out of that great doing the job no we're not so I put that into the 2 and over the years I more and more features more and more strictness checks and so it became
so much that nobody really wanted to turn it on the because maybe they're interested in getting warnings for 1 thing but not for the 3 others so that's why we changes his pitch period for and make it if you fine grained control over the types of checks that you want so now you can select yes I want to be strict about tested in the test anything I want to be strict about unintentionally covered code and want to restrict about outputs during tests so I want to enforce a time limit for it it is sometimes really useful if you habitat there should be a unit test then that test should be done in how the 2nd or even quicker set a time out and it runs in which reached a time of each in the Board's execution of the test market the failure to get an error this ran longer or this wanted to run longer than it's supposed to be running and which we stop the next thing that I would like to add there is something and that the engineers at Google have already built for CPP unit and and J. unit which inspects the codes that is run by the test is running so you can see this test is not allowed to execute code that touches the file system of talks the network but so far Derek keeps refusing my request to implement the necessary functionality makes the work to get the data that and for the so yes OK and of course
you can also configure that an XML configuration file you can still use the big strict modes to turn off and on but that's been that that's going to be deprecated his PhD in for at 5 I want to get rid of the strict that 1 big thing and eventually at least turn on the streets about testable looked anything of by default I hope people will take me for that other things that happen with peak period for on support for patch coverage which is the really interesting code coverage metric for legacy projects that say you have no education has been developed for a couple of years hundreds of thousands of lines of code no test yet and developers want to start testing and looking at the code covers report for the entire project is very frustrating 0 per cent but what usually works for large parts of this of the codebase is the same from now on I want to have a patch coverage of 100 per cent every time I change a line of code I want to have a test for that line and as a separate tool
for the but of a command line tool for their code-coverage library appeared unit has a speech b c o me and what that can do it this it takes the input from PHP units about which lines of code mn executed by the test for running and it takes a pet shop something that comes out of the was in control for and then it looks in the patch finds out which lines are changed checks so was the code coverage data and checked OK this line has been changed as line was executed by the test for running this line is this part of this line of the patch is covered by the test that's OK and it's really easy to integrate in in continues integration and get information at the end of you build them a patch covered up on set the and much less
frustrating than looking at the you're % from the beginning of the testing effort of course the major version like pitch period for always gives us the opportunity to break things or removed things that don't work well and don't work as expected so 1 2 B C breaks of pitch period for both the removal of support for stopping and marking static methods which never really worked in although people tried to convince me that it actually worked for that particular cases highly doubt that but anyway it's gone but makes sense speech being the 4 of 1 is a typical range of the 4 series in that it only part in the forces until now but in that it didn't bring any new features but refactoring and we are currently doing a lot of respect and from last was really is there's a lot of respect and of pitch and break it down and ever more smaller components but it can have that 1 recycle that can be tested in isolation from the other components and so well I'll talk about the goal of this at the end of PHP for unit for a tune saw in addition to restrict Mt and this no a test for our test methods that are annotated with to do which is sometimes useful again command line option from
configuration what you would expect PHP unit for don't through all this all some more features at least and at most invocation count matches which are very convenient he deprecated so this attack select there's a lot of codes in PhD units that I'm not proud and which is to be expected in any project that has run for a decent amount of time in this particular case it's code that I didn't write and I make make the mistake about 10 years ago to accept the and it's cold it sort of works but was not really well implemented it was not really documented and people were complaining about the fact that it's not as useful as it could be so we decided to would deprecated now at some point in the cued 5 it will remove it just Welsh is currently working on a replacement for this based on symphonies stunk raw components which takes care of the ball uh the hard parts of this feature and we just need to map that was assertions and refactoring before uniform to came out around the time when there was a change in pH PA to a way that you could using a hack instantiate objects without running the constructor which is something that you should never never do and lest you builds a generic form like doctrine to or build a starving and walking library like the 1 in peach unit and at some points balls and Benny amino were worked on a number of works on doctrine and myself we were so frustrated that that on a daily basis we had to update our hacks fall and had versions which is because peach PA xyz would be a completely different than x y the plus 1 and x y plus 1 but will be a completely different again and we want to have to scoot application going on and every because that's 1 problem should be solved in 1 place and so the 1st iteration also okrem is instantiated and um interviewed for extremely replace them with something else yes you replace the Stockton instantiated was rewritten and donated to the doctrine project and that's what they're using now PHP unit for a for the current theories came out in December again refactoring all decoding cage unit that deals with global states I don't know if you know that but by default when the test is run before each test piece unit makes a snapshot of all global states all global variables also but global variables I mean static at tributes and user-defined classes all of language which was efficiently but you're using in legacy code I mean all that code has been moved to a separate package because I wanted to be reusable of at least 1 request wideband somebody wanted to read reuse of code for for project in i above tinkering with the idea of building a new tool that could use that code and what that um just refractory then had crucible for this now a global state come component on get up on that allows you to make snapshots of on of the which can be exception even more so than teaching and could to the so this slowly coming into the future and it's already February 2015 but not release date yet but let's assume that we had already Friday so the spirit for a FIFO come out and this 1 big new feature in there in that it has out of the box support for prophesy the most people that are unhappy with PHP units over the last couple of years are mostly unhappy with regards to the stopping and mocking functionality each unit the syntax is not what 1 hour studying and walking libraries look like the implementation is lacking in some areas of and again 1 and that's 1 of the parts of speech here that I'm not really proud and again most of its was not developed by me I was almost done this my implementation of that was very similar to what Constantine and his collaborators build this prophesy a couple of years ago when I was entering my final year at university and I need to focus on something else and somebody sent me a bit pattern that hey I finished your implementation and I make a mistake of just merging but then or as much merging as you could do CBS but yes so prophesy it's off the alternative walking libraries that are about like mockery and fake and so on prophesy is the 1 that I like the most that I find them the most useful and it's basically everything that I what build a new standing on walking library on today so it's a highly opinionated very powerful and flexible objects mocking framework and most people that I talked to the last couple of months when I was working on this integration told me that they are confused by the terminology that prophesy use well and it talks about profits and prophecies and revelations and you chuckle and you love and you green and yes it's a little bit funny but there is the meaning behind it tries to load the area thinking on in a certain direction the and I'm not sure the world really need this terminology tool effective way of thinking about that's the way that concentrated solar profit creates prophecies by prophesized think them numbers integration PHP you don't need to care about the profit because the profit is handled and maintains by page unit internally the prophesy describes how an object would be a and freewheeling of prophesy yields the test double yields armed the revelations yields the actual object it looks like the real thing and behaves as you needed for which test but the really brilliant thing behind this is that it applies other fundamental concept of separation of concerns to standing and walking before like is it dispute the units on starving and walking library you have 1 object that has the configuration and the real thing that it tries to emulate you'd say but this get marked class name you get an object that looks like the real classes and in addition to that class of methods on that object you have additional API to configure its behavior which is convenient and so you have a methods off the same name the as pitch period API in original class the which I thought would never happen until about 2 years ago when we
added the method method I have OK In this case it makes sense to have a method named methods because you configure the behavior of a specific method on this object looks like some of the object but then again way excessive reuse candidates we released a new version of pitch units and on the 1st day and at several but report saying my tests would no longer works because I actually have classes that have methods named method and everything crashes that was a tricky 1 to solve of but was prophesy the don't ever can run into this problem because we have 1 object and has the configuration and completely separate from that is the actual test double the the use of stuff or walk so just to give you an idea what the syntax looks like and the testing the collaboration also subject an observer objects so we create our subject then the props start prophesized sizing about the observer recreated prophesy for the observer and the saying the update methods often observer should be called this this argument so it's much more natural and then what you would write an actual code in a description of some the expectation and your ID can actually help you with that because you get all the completion forest of it's not the but if you have the help of the and then we call the reveal methods but once on configuring test I will we call the reveal methods on the prophesy to reveal the prophesy and you get the test object and can pass that to our subject and then the 1st and once you get behind the terminal speed in in in reality you don't really need to worry about me to think a lot about um the profit and prophecies and revelations objects in real time the about it's very powerful and course that doesn't really show on that are on the example that something flight so what else can here 4 or 5 so built in support for prophesy registration of custom comparatives therefore equals so when you use a search equals what happens entirely is units tries to find the most specific comparative but a comparison implementation for the type of variable that we have supplied In the case of 2 objects that a try and to convert it looks at the objects for instance figure out of those 2 States time objects and their specific I'm implementation to compare data objects for instance revision um a given delta these 2 data objects should be equal and if they are within an o 10 seconds or within 1 day of each other I still consider them equal that's what the daytime comparison us various a dumb documents on comparative that canonicalize Espon structures and then compares them and so on and starting to speech we report 5 you can is a convenient way of registering you all in comparison of comparative so this is what I'm about the hello world of of a comparison implementation you need to implement 2 methods we need to implement accepts which is basically a way of the comparative telling PHP yes I can compare these 2 and then the actual implementation so in this case we assume that we have a class named example and that has an equal to method and then that returns true of 1 other example of candles to us that equals otherwise and not equal and if the not because we need to raise an exception and that the and to actually use that's the need to register the competitor and afterward and register it so that you don't run into any issues that our comparative firing another testimony don't expect the 5 yeah Over the years I've added some features that I am myself stupid but um I gave in to pressure from the internet no I will not accept and like the cats result printer and people page 3 minutes but this 1 actually mates sort of sense at least more sense than uh a randomly colored cats so there is no Odesta's columns on command line options people complaints for years about pitch period only using the columns but the screens have gone wider and apparently some people use the shell at full screen all the time and they don't want to waste screen screen real estate would want to use all the columns so if you want to automatically lose all the columns that you can't tell has used actors columns maximum tries to figure out what the maximum amount of columns this I learned a lot of all the things that I never wanted to learn while trying to implement that properly for instance that Windows only claims to have 80 characters by default the column columns by different was actually 79 because it comes the cursor as long of yeah I don't we want to go there but that apparently it's important for some people so I implement and you will likely see is some performance improvement for when you use a equals a lot and like most of the time test should pass all the time so unless the test is failing comparison should also be always be included the optimization have that you can do it makes a comparison of its articles are faster deprecated too strict command panopticon as students as strict configuration setting and now we going into the future beyond 4 of 5 at the moment pitch period for supported on page 3 5 3 85 55 5 PHP 5 6 sort of supported on a stand and it works on page be sad talk on the current state of and so what to do about this in the future and because it means that we have some in large parts separated ution branches um in the code base to deal with version specific issues and I really want to get rid of especially focus provides 3 and be 5 4 on actively supported and I also want to use language features that have been added in the last 10 years or so the the and I really don't want to care about 55 3 mortgage for the last 2 years or so I cannot build without patching it on recent and its relations yes there is Travis and yes Travis have a very specific P P 5 3 3 version i'm because that's the million version requirement for a lot of popular components libraries and frameworks but I don't really want to have to do that anymore so I
asked a a question so what this piece period 5 came out and at the end of this year and would say the only supports for 55 6 and pick it up because by the time the December comes around Peachtree 5 6 and Tishby 7 will be the only PHP releases that are actively report supported by the PhD project according to the times it will be still security fixes 4 5 5 months and really care what the or and all the very FIL the that so and pitch period 6 maybe a yearly data and only support 57 and I expected again should start to have it didn't have most people say yes to it I don't know if those are the same people that would start complaining ones actually do it but that's another way and the only way to find out what the right way to do this I would be to of to provide feedback on a publisher's slides those orange things that we actually goes to the issue and it up provides the type that the and this and I think we need something like that go pitch 7 meaning like for PHP 5 the it's happening that's good and we should really get rid of already told crap for PhD itself there's going to be more refactoring I hope that at the end of this year we have separate packages of separate components formed of framework and the test run are and once we have that we can completely rewrite the test on a from scratch after modern test that supports pound test execution distributed test execution randomized order of tests all the things that we wanted for at least 15 years or at least I wanted them for 15 years I and the discussing most of these refactorings and at the especially with regard to the test runner up is this Constantine Keren and others who worked on pitch back on b hat and other test frameworks and it might just be that the rights the foundation for a test run are that is used by pitch period by page respect might be at yeah so we don't individually for each test framework have to deal with parallelization and distribution of workload and so on just share what makes sense to share and um in so far we only talked about it and hopefully soon we start to act work separate a framework from the test runner already mentioned that we write a test on this important and a lot of time the
tho I tend to take questions as in I lot of the size of the graph in so yes and you what you In the talk of the and so on and yes so there were at least 2 questions in there question 1 why do we keep adding new assertions and step that question 1 half for question to the other language stacks of testing frameworks have a different concepts like reusable matches like some handcrafts which is very popular job world hampers J. you genuine and pressed on yes so OK where to begin a name as the 2nd part so PHP you're actually has composable uh matches all the assertions use those compo their matches and turning so assert equals if you call a survey because what it does it creates an object of the is equal constrained types and passes that on to assert that it's and assert that is inspired by hand that so entirely use this everywhere and it's also exposed externally it's also documented that you can do it's but so far in the at least 10 years that this has been around I saw no test suite that actually uses it so he did OK OK good and other parts so Windham interest came 1st came out of 1st came up in the Java community but I actually started the hand prestige be project because I wanted to have something similar dead didn't seem to be any interest in that so I took what I had there and made the foundation for what I just described before use it internally for pitch period least because to me it makes a lot of sense and also it's the same code for assertions and the matches that are used in a stats and not in in the marks and why do we keep adding more assertions I don't know I I tight try really hard not to at the end of the day everything other than the search true and maybe assert false is syntactic sugar but it's very convenient time to have a specific assertion especially since you get very specific and output and something goes wrong so for example look at this episode and the of course you can say a search through empty and then the strain on array or whatever but if that fails all the people that can tell you I expected this to be for true and I got falls which has nothing to do with the domain of what you were testing you have an array you want asserted down when elements you don't want to get I got false I expected true that doesn't match it's broken the the yeah and nobody gets into a new way of writing history that not empty empty hearing it just hurts chart other questions work was but in the thank