[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:backend\u002Fphp-testing-tooling":4,"config":252},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":9,"spec_key":7,"spec_name":7,"locale":10,"cell_total":11,"field_total":12,"seniorities":13,"topics":17,"specs":148,"samples":168},"backend","Backend","","php-testing-tooling","Php Testing Tooling","en",75,3300,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,124,127,130,133,136,139,142,145],{"key":19,"name":20,"count":11},"api-design","API Design",{"key":22,"name":23,"count":11},"caching","Caching",{"key":25,"name":26,"count":11},"concurrency","Concurrency",{"key":28,"name":29,"count":11},"csharp-concurrency-async","Csharp Concurrency Async",{"key":31,"name":32,"count":11},"csharp-exceptions","Csharp Exceptions",{"key":34,"name":35,"count":11},"csharp-generics-interfaces","Csharp Generics Interfaces",{"key":37,"name":38,"count":11},"csharp-memory-performance","Csharp Memory Performance",{"key":40,"name":41,"count":11},"csharp-stdlib-http","Csharp Stdlib Http",{"key":43,"name":44,"count":11},"csharp-testing-tooling","Csharp Testing Tooling",{"key":46,"name":47,"count":11},"databases-sql","Databases \u002F SQL",{"key":49,"name":50,"count":11},"go-concurrency","Go Concurrency",{"key":52,"name":53,"count":11},"go-errors","Go Errors",{"key":55,"name":56,"count":11},"go-interfaces-generics","Go Interfaces Generics",{"key":58,"name":59,"count":11},"go-memory-performance","Go Memory Performance",{"key":61,"name":62,"count":11},"go-stdlib-http","Go Stdlib Http",{"key":64,"name":65,"count":11},"go-testing-tooling","Go Testing Tooling",{"key":67,"name":68,"count":11},"java-concurrency","Java Concurrency",{"key":70,"name":71,"count":11},"java-exceptions","Java Exceptions",{"key":73,"name":74,"count":11},"java-generics-interfaces","Java Generics Interfaces",{"key":76,"name":77,"count":11},"java-memory-jvm","Java Memory Jvm",{"key":79,"name":80,"count":11},"java-stdlib-http","Java Stdlib Http",{"key":82,"name":83,"count":11},"java-testing-tooling","Java Testing Tooling",{"key":85,"name":86,"count":11},"messaging-queues","Messaging \u002F Queues",{"key":88,"name":89,"count":11},"networking-http","Networking \u002F HTTP",{"key":91,"name":92,"count":11},"nodejs-error-handling","Nodejs Error Handling",{"key":94,"name":95,"count":11},"nodejs-event-loop-async","Nodejs Event Loop Async",{"key":97,"name":98,"count":11},"nodejs-memory-performance","Nodejs Memory Performance",{"key":100,"name":101,"count":11},"nodejs-modules-streams","Nodejs Modules Streams",{"key":103,"name":104,"count":11},"nodejs-stdlib-http","Nodejs Stdlib Http",{"key":106,"name":107,"count":11},"nodejs-testing-tooling","Nodejs Testing Tooling",{"key":109,"name":110,"count":11},"php-concurrency-async","Php Concurrency Async",{"key":112,"name":113,"count":11},"php-exceptions","Php Exceptions",{"key":115,"name":116,"count":11},"php-generics-interfaces","Php Generics Interfaces",{"key":118,"name":119,"count":11},"php-memory-performance","Php Memory Performance",{"key":121,"name":122,"count":11},"php-stdlib-http","Php Stdlib Http",{"key":8,"name":9,"count":11},{"key":125,"name":126,"count":11},"python-concurrency-async","Python Concurrency Async",{"key":128,"name":129,"count":11},"python-errors-context","Python Errors Context",{"key":131,"name":132,"count":11},"python-memory-performance","Python Memory Performance",{"key":134,"name":135,"count":11},"python-stdlib-http","Python Stdlib Http",{"key":137,"name":138,"count":11},"python-testing-tooling","Python Testing Tooling",{"key":140,"name":141,"count":11},"python-typing-oop","Python Typing Oop",{"key":143,"name":144,"count":11},"security","Security",{"key":146,"name":147,"count":11},"testing","Testing",[149,153,156,159,162,165],{"key":150,"name":151,"count":152},"csharp","C#\u002F.NET",450,{"key":154,"name":155,"count":152},"go","Go",{"key":157,"name":158,"count":152},"java","Java",{"key":160,"name":161,"count":152},"nodejs","Node.js",{"key":163,"name":164,"count":152},"php","PHP",{"key":166,"name":167,"count":152},"python","Python",[169,187,200,213,226,239],{"id":170,"topic":9,"difficulty":171,"body":172,"options":173,"correct_key":178,"explanation":186},"019f7281-52e7-7731-b8b5-c9e4f30b9589",1,"In PHPUnit, a test class conventionally extends which base class to get assertion methods and the test lifecycle (setUp\u002FtearDown, discovery by the runner)?",[174,177,180,183],{"key":175,"text":176},"a","`\\PHPUnit\\Framework\\TestSuite`",{"key":178,"text":179},"b","`\\PHPUnit\\Framework\\TestCase`",{"key":181,"text":182},"c","`\\PHPUnit\\Framework\\Assert`",{"key":184,"text":185},"d","`\\PHPUnit\\Runner\\BaseTestRunner`","TestCase provides the familiar assert* methods plus the setUp\u002FtearDown lifecycle, and it's what the test runner discovers and instantiates per test method. Assert only has assertions, without the lifecycle\u002Fdiscovery machinery; TestSuite groups tests together; BaseTestRunner isn't part of the framework namespace.",{"id":188,"topic":9,"difficulty":171,"body":189,"options":190,"correct_key":184,"explanation":199},"019f7281-52e8-7dc2-b778-92e72483d471","In a PHPUnit test class, what is `setUp()` used for?",[191,193,195,197],{"key":175,"text":192},"It runs after each test method, typically used for cleanup work.",{"key":178,"text":194},"It registers a new test case with the test runner.",{"key":181,"text":196},"It runs once before the entire test class, sharing state between all test methods.",{"key":184,"text":198},"It runs before EACH test method, avoiding repeated initialization logic in every test.","setUp() is invoked before every single test method in the class, giving each test a fresh, predictable starting point without duplicating initialization code in every method. Running cleanup logic after each test is tearDown()'s job, not setUp()'s; and it's not a once-per-class hook — that would let tests interfere with each other's state.",{"id":201,"topic":9,"difficulty":171,"body":202,"options":203,"correct_key":175,"explanation":212},"019f7281-52e9-77a3-bfb3-fdd4cb871e2b","In a PHPUnit test class, what is `tearDown()` used for?",[204,206,208,210],{"key":175,"text":205},"It runs after EACH test method, typically releasing resources or state that setUp() created.",{"key":178,"text":207},"It only runs if the test method throws an uncaught exception.",{"key":181,"text":209},"It runs once after the entire test class finishes, to close any global connections.",{"key":184,"text":211},"It runs before each test method, right after setUp().","tearDown() runs after every test method (regardless of pass\u002Ffail), the natural place to release resources or reset state that setUp() set up, keeping tests independent of each other. It isn't conditional on failures, isn't a once-per-class hook, and doesn't run before the test.",{"id":214,"topic":9,"difficulty":171,"body":215,"options":216,"correct_key":181,"explanation":225},"019f7281-52ea-70b1-a8f5-deceef9202af","```php\nclass MathTest extends \\PHPUnit\\Framework\\TestCase\n{\n    public function testIsEven(): void\n    {\n        $this->assertTrue(is_int(4 \u002F 2));\n    }\n}\n```\nWhat happens when this test runs?",[217,219,221,223],{"key":175,"text":218},"It fails, because assertTrue() requires a literal `true` value, not an expression.",{"key":178,"text":220},"It throws a TypeError, because is_int() cannot be used inside assertTrue().",{"key":181,"text":222},"It passes, because `4 \u002F 2` evaluates to the integer `2`, and `is_int(2)` is `true`.",{"key":184,"text":224},"It fails, because `\u002F` always returns a float in PHP regardless of the operands.","PHP's `\u002F` returns an int when both operands are ints and the division is exact; `4 \u002F 2` is `2` (an int), so `is_int(2)` is `true` and assertTrue(true) passes. assertTrue() happily accepts any boolean expression, not just a literal, and there's no TypeError here.",{"id":227,"topic":9,"difficulty":171,"body":228,"options":229,"correct_key":178,"explanation":238},"019f7281-52f1-7cf3-a08c-365b3a334fb0","```php\nfunction findUser(array $users, string $id): ?array\n{\n    foreach ($users as $u) {\n        if ($u['id'] === $id) {\n            return $u;\n        }\n    }\n    return null;\n}\n\nclass UserLookupTest extends \\PHPUnit\\Framework\\TestCase\n{\n    public function testMissingUser(): void\n    {\n        $result = findUser([], 'u1');\n        $this->assertNull($result);\n    }\n}\n```\nGiven an empty `$users` array, what does this test check?",[230,232,234,236],{"key":175,"text":231},"That `findUser` returns `false`, since PHP functions default to returning `false` on failure.",{"key":178,"text":233},"That `findUser` returns `null` when no matching user is found, and the test passes.",{"key":181,"text":235},"That `findUser` throws an exception when the array is empty, and the test fails because no exception is thrown.",{"key":184,"text":237},"That `findUser` returns an empty array `[]`, and assertNull treats `[]` as null.","With an empty `$users` array, the foreach loop never runs, so `findUser` falls through to `return null;`. assertNull($result) checks that $result is exactly null, which it is here, so the test passes. PHP has no implicit 'return false on failure' convention, this function never throws, and `[]` is not treated as null by assertNull.",{"id":240,"topic":9,"difficulty":171,"body":241,"options":242,"correct_key":175,"explanation":251},"019f7281-52f5-77c3-beae-ac636c003f9d","A project's entry script starts with `require __DIR__ . '\u002Fvendor\u002Fautoload.php';`. What does this line actually give you?",[243,245,247,249],{"key":175,"text":244},"It registers Composer's autoloader, which loads classes on demand per composer.json's mappings (e.g. PSR-4).",{"key":178,"text":246},"It starts the PHPUnit test runner and loads the phpunit.xml configuration.",{"key":181,"text":248},"It downloads and installs all of the project's dependencies listed in composer.json.",{"key":184,"text":250},"It manually loads every PHP class file in the project into memory upfront.","vendor\u002Fautoload.php is a file Composer generates; requiring it registers an autoload function that knows how to map class\u002Fnamespace names to files (per PSR-4, classmap, etc.), loading each class file lazily the first time that class is actually used. It has nothing to do with PHPUnit specifically, doesn't install anything (that's `composer install`), and doesn't eagerly load every file.",{"fields":253,"seniorities":424,"interview_shapes":425,"locales":430,"oauth":432,"question_count":435,"coach_enabled":436,"jd_match_enabled":436},[254,265,286,303,327,340,359,378,398,405,411,418],{"key":5,"name_tr":6,"name_en":6,"sort":171,"specializations":255},[256,259,260,261,262,263,264],{"key":257,"name":258,"field":5},"general","Genel",{"key":154,"name":155,"field":5},{"key":166,"name":167,"field":5},{"key":157,"name":158,"field":5},{"key":150,"name":151,"field":5},{"key":160,"name":161,"field":5},{"key":163,"name":164,"field":5},{"key":266,"name_tr":267,"name_en":267,"sort":268,"specializations":269},"frontend","Frontend",2,[270,271,274,277,280,283],{"key":257,"name":258,"field":266},{"key":272,"name":273,"field":266},"javascript","JavaScript",{"key":275,"name":276,"field":266},"typescript","TypeScript",{"key":278,"name":279,"field":266},"react","React",{"key":281,"name":282,"field":266},"vue","Vue",{"key":284,"name":285,"field":266},"angular","Angular",{"key":287,"name_tr":288,"name_en":288,"sort":289,"specializations":290},"fullstack","Fullstack",3,[291,292,293,294,295,296,297,298,299,300,301,302],{"key":257,"name":258,"field":287},{"key":154,"name":155,"field":5},{"key":166,"name":167,"field":5},{"key":157,"name":158,"field":5},{"key":150,"name":151,"field":5},{"key":160,"name":161,"field":5},{"key":163,"name":164,"field":5},{"key":272,"name":273,"field":266},{"key":275,"name":276,"field":266},{"key":278,"name":279,"field":266},{"key":281,"name":282,"field":266},{"key":284,"name":285,"field":266},{"key":304,"name_tr":305,"name_en":305,"sort":306,"specializations":307},"devops-cloud","DevOps \u002F Cloud",4,[308,309,312,315,318,321,324],{"key":257,"name":258,"field":304},{"key":310,"name":311,"field":304},"aws","AWS",{"key":313,"name":314,"field":304},"gcp","GCP",{"key":316,"name":317,"field":304},"azure","Azure",{"key":319,"name":320,"field":304},"kubernetes","Kubernetes",{"key":322,"name":323,"field":304},"terraform","Terraform",{"key":325,"name":326,"field":304},"linux","Linux",{"key":328,"name_tr":329,"name_en":329,"sort":330,"specializations":331},"ai-engineer","AI Engineer",5,[332,333,334,337],{"key":257,"name":258,"field":328},{"key":166,"name":167,"field":328},{"key":335,"name":336,"field":328},"llm-rag","LLM\u002FRAG",{"key":338,"name":339,"field":328},"mlops","MLOps",{"key":341,"name_tr":342,"name_en":343,"sort":344,"specializations":345},"database","Veritabanı","Database",6,[346,347,350,353,356],{"key":257,"name":258,"field":341},{"key":348,"name":349,"field":341},"postgresql","PostgreSQL",{"key":351,"name":352,"field":341},"mysql","MySQL",{"key":354,"name":355,"field":341},"mongodb","MongoDB",{"key":357,"name":358,"field":341},"redis","Redis",{"key":360,"name_tr":361,"name_en":362,"sort":363,"specializations":364},"mobile","Mobil","Mobile",7,[365,366,369,372,375],{"key":257,"name":258,"field":360},{"key":367,"name":368,"field":360},"ios-swift","iOS (Swift)",{"key":370,"name":371,"field":360},"android-kotlin","Android (Kotlin)",{"key":373,"name":374,"field":360},"flutter","Flutter",{"key":376,"name":377,"field":360},"react-native","React Native",{"key":143,"name_tr":379,"name_en":144,"sort":380,"specializations":381},"Güvenlik",8,[382,383,386,389,392,395],{"key":257,"name":258,"field":143},{"key":384,"name":385,"field":143},"appsec","AppSec",{"key":387,"name":388,"field":143},"offensive-pentest","Offensive \u002F Pentest",{"key":390,"name":391,"field":143},"cloud-security","Cloud Security",{"key":393,"name":394,"field":143},"devsecops","DevSecOps",{"key":396,"name":397,"field":143},"blue-team-incident","Blue Team \u002F Incident",{"key":399,"name_tr":400,"name_en":401,"sort":402,"specializations":403},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[404],{"key":257,"name":258,"field":399},{"key":406,"name_tr":407,"name_en":407,"sort":408,"specializations":409},"data-engineer","Data Engineer",10,[410],{"key":257,"name":258,"field":406},{"key":412,"name_tr":413,"name_en":414,"sort":415,"specializations":416},"game-dev","Oyun Geliştirme","Game Development",11,[417],{"key":257,"name":258,"field":412},{"key":419,"name_tr":420,"name_en":420,"sort":421,"specializations":422},"ml-engineer","ML Engineer",12,[423],{"key":257,"name":258,"field":419},[14,15,16],{"junior":426,"mid":428,"senior":429},{"questions":427,"median_sec":3},20,{"questions":427,"median_sec":3},{"questions":427,"median_sec":3},[431,10],"tr",[433,434],"google","github",21750,true]