Artikoli

Tgħallem kif tagħmel testijiet f'Laravel b'eżempji sempliċi, billi tuża PHPUnit u PEST

Fejn jidħlu testijiet awtomatizzati jew unit tests, fi kwalunkwe lingwa ta’ programmar, hemm żewġ opinjonijiet opposti:

  • Ħela ta 'ħin
  • Inti ma tistax tagħmel mingħajrha

Għalhekk, b'dan l-artikolu se nippruvaw nikkonvinċu lil ta 'l-ewwel, speċjalment billi nuru kemm huwa faċli li tibda bl-ittestjar awtomatizzat f'Laravel.

L-ewwel ejja nitkellmu dwar il-"għaliex", u mbagħad ejja naraw xi eżempji tal-kif.

Għaliex għandna bżonn ittestjar awtomatizzat

Testijiet awtomatizzati jmexxu partijiet mill-kodiċi u jirrappurtaw kwalunkwe żball. Dak hu l-aktar mod sempliċi biex tiddeskrivihom. Immaġina li toħroġ karatteristika ġdida f'app, u mbagħad assistent robot personali jmur jittestja manwalment il-karatteristika l-ġdida, filwaqt li jittestja wkoll jekk il-kodiċi l-ġdid ma kisirx xi waħda mill-karatteristiċi qodma.

Dan huwa l-vantaġġ ewlieni: jerġa 'jittestja l-karatteristiċi kollha awtomatikament. Dan jista 'jidher xogħol żejjed, imma jekk ma tgħidx lir-"robot" biex tagħmel dan, għandna alternattivament nagħmluha manwalment, hux? 

Jew karatteristiċi ġodda jistgħu jiġu rilaxxati mingħajr ma jiġi ttestjat jekk jaħdmux, bit-tama li l-utenti jirrappurtaw bugs.

Testijiet awtomatizzati jistgħu jagħtuna diversi vantaġġi:

  • Iffranka l-ħin tal-ittestjar manwali;
  • Huma jippermettulek tiffranka l-ħin kemm fuq il-funzjoni l-ġdida implimentata kif ukoll fuq il-funzjonijiet konsolidati billi tevita rigressjoni;
  • Immoltiplika dan il-benefiċċju bil-karatteristiċi ġodda kollha u l-karatteristiċi kollha diġà implimentati;
  • It-tliet punti preċedenti japplikaw għal kull verżjoni ġdida;
  • ...

Ipprova immaġina l-applikazzjoni tiegħek f'sena jew tnejn, b'iżviluppaturi ġodda fit-tim li ma jafux il-kodiċi miktub fis-snin preċedenti, jew saħansitra kif tittestjah. 

L-ewwel testijiet awtomatizzati tagħna

Biex twettaq l-ewwel ittestjar awtomatizzat f'Laravel, m'għandekx bżonn tikteb xi kodiċi. Iva, inti taqra dan id-dritt. Kollox huwa diġà kkonfigurat u ppreparat fil-pre-installazzjonidefinite ta' Laravel, inkluż l-ewwel eżempju bażiku.

Tista' tipprova tinstalla proġett Laravel u tmexxi l-ewwel testijiet immedjatament:

laravel new project
cd project
php artisan test

Dan għandu jkun ir-riżultat fil-console tiegħek:

Jekk nagħtu ħarsa lejn il-predefinit ta' Laravel /tests, għandna żewġ fajls:

testijiet/Feature/ExampleTest.php :

class ExampleTest extends TestCase
{
    public function test_the_application_returns_a_successful_response()
    {
        $response = $this->get('/');
 
        $response->assertStatus(200);
    }
}

M'għandekx bżonn tkun taf l-ebda sintassi biex tifhem x'inhu għaddej hawn: tagħbija l-home page u ċċekkja jekk il-kodiċi tal-istatus HTTP è "200 OK".

Magħruf ukoll bħala l-isem tal-metodu test_the_application_returns_a_successful_response() isir test li jinqara meta tara r-riżultati tat-test, sempliċiment billi tissostitwixxi s-simbolu tas-sottolinja bi spazju.

testijiet/Unità/ExampleTest.php :

class ExampleTest extends TestCase
{
    public function test_that_true_is_true()
    {
        $this->assertTrue(true);
    }
}

Jidher daqsxejn inutli, tivverifika biex tara jekk dan hux minnu? 

Aħna ser nitkellmu speċifikament dwar it-testijiet tal-unità ftit aktar tard. Għalissa, trid tifhem x'jiġri ġeneralment f'kull test.

  • Kull fajl tat-test fil-folder /tests hija klassi PHP li testendi t-TestCase ta' PHPUnit
  • F'kull klassi, tista 'toħloq metodi multipli, normalment metodu wieħed għal sitwazzjoni biex tittestja
  • F'kull metodu hemm tliet azzjonijiet: it-tħejjija tas-sitwazzjoni, imbagħad it-teħid ta' azzjoni u mbagħad tivverifika (l-affermazzjoni) jekk ir-riżultat huwiex kif mistenni

Strutturalment, dak kollu li għandek bżonn tkun taf, kollox jiddependi fuq l-affarijiet eżatti li trid tittestja.

Biex tiġġenera klassi tat-test vojta, sempliċement ħaddem dan il-kmand:

php artisan make:test HomepageTest

Il-fajl huwa ġġenerat tests/Feature/HomepageTest.php:

class HomepageTest extends TestCase
{
    // Replace this method with your own ones
    public function test_example()
    {
        $response = $this->get('/');
 
        $response->assertStatus(200);
    }
}

Issa ejja naraw x'jiġri jekk kodiċi tat-test ifalli f'Laravel

Ejja issa naraw x'jiġri jekk l-asserzjonijiet tat-test ma jagħtux ir-riżultat mistenni.

Ejja nbiddlu l-eżempji tat-testijiet għal dan:

class ExampleTest extends TestCase
{
    public function test_the_application_returns_a_successful_response()
    {
        $response = $this->get('/non-existing-url');
 
        $response->assertStatus(200);
    }
}
 
 
class ExampleTest extends TestCase
{
    public function test_that_true_is_false()
    {
        $this->assertTrue(false);
    }
}

U issa, jekk imexxu l-kmand php artisan test għal darb'oħra:

 FAIL  Tests\Unit\ExampleTest
⨯ that true is true
 
 FAIL  Tests\Feature\ExampleTest
⨯ the application returns a successful response
 
---
 
• Tests\Unit\ExampleTest > that true is true
Failed asserting that false is true.
 
at tests/Unit/ExampleTest.php:16
   12▕      * @return void
   13▕      */
   14▕     public function test_that_true_is_true()
   15▕     {
➜  16▕         $this->assertTrue(false);
   17▕     }
   18▕ }
   19▕
 
• Tests\Feature\ExampleTest > the application returns a successful response
Expected response status code [200] but received 404.
Failed asserting that 200 is identical to 404.
 
at tests/Feature/ExampleTest.php:19
   15▕     public function test_the_application_returns_a_successful_response()
   16▕     {
   17▕         $response = $this->get('/non-existing-url');
   18▕
➜  19▕         $response->assertStatus(200);
   20▕     }
   21▕ }
   22▕
 
 
Tests:  2 failed
Time:   0.11s

Hemm żewġ testijiet li fallew, immarkati bħala FAIL, bi spjegazzjonijiet hawn taħt u vleġeġ li jindikaw il-linja eżatta tat-testijiet li fallew. L-iżbalji huma indikati b'dan il-mod.

Eżempju: Ittestjar tal-kodiċi tal-formola tar-reġistrazzjoni f'Laravel

Ejja ngħidu li għandna formola u għandna bżonn nittestjaw diversi każijiet: aħna niċċekkjaw jekk ifallix b'dejta invalida, niċċekkjaw jekk tirnexxix bl-input korrett, eċċ.

Il-kit tal-bidu uffiċjali minn Laravel Breeze jinkludi i tittestja l-funzjonalità fi ħdanha. Ejja nħarsu lejn xi eżempji minn hemm:

tests/Feature/RegistrationTest.php

use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
 
class RegistrationTest extends TestCase
{
    use RefreshDatabase;
 
    public function test_registration_screen_can_be_rendered()
    {
        $response = $this->get('/register');
 
        $response->assertStatus(200);
    }
 
    public function test_new_users_can_register()
    {
        $response = $this->post('/register', [
            'name' => 'Test User',
            'email' => 'test@example.com',
            'password' => 'password',
            'password_confirmation' => 'password',
        ]);
 
        $this->assertAuthenticated();
        $response->assertRedirect(RouteServiceProvider::HOME);
    }
}

Hawnhekk għandna żewġ testijiet fi klassi waħda, peress li t-tnejn huma relatati mal-formola ta’ reġistrazzjoni: wieħed jiċċekkja jekk il-formola hijiex mgħobbija b’mod korrett u ieħor jiċċekkja jekk is-sottomissjoni taħdem tajjeb.

Ejja nsiru familjari ma 'żewġ metodi oħra biex nivverifikaw ir-riżultat, żewġ affermazzjonijiet oħra: $this->assertAuthenticated()$response->assertRedirect(). Tista 'tiċċekkja l-asserzjonijiet kollha disponibbli fid-dokumentazzjoni uffiċjali ta' PHPUnit e Rispons Laravel . Innota li xi asserzjonijiet ġenerali jseħħu dwar is-suġġett $this, filwaqt li oħrajn jiċċekkjaw l-ispeċifiċi $responsemis-sejħa tar-rotta.

Ħaġa oħra importanti hija l- use RefreshDatabase;dikjarazzjoni, bil-puplesija, imdaħħla fuq il-klassi. Huwa meħtieġ meta l-azzjonijiet tat-test jistgħu jaffettwaw id-database, bħal f'dan l-eżempju, l-illoggjar iżid dħul ġdid fil- userstabella tad-database. Għal dan, għandek toħloq database tat-test separata li tiġi aġġornata magħha php artisan migrate:freshkull darba li jsiru t-testijiet.

Għandek żewġ għażliet: toħloq fiżikament database separata jew tuża database SQLite fil-memorja. It-tnejn huma kkonfigurati fil-fajl phpunit.xmlipprovdut awtomatikamentdefinita ma Laravel. Speċifikament, għandek bżonn din il-parti:

<php>
    <env name="APP_ENV" value="testing"/>
    <env name="BCRYPT_ROUNDS" value="4"/>
    <env name="CACHE_DRIVER" value="array"/>
    <!-- <env name="DB_CONNECTION" value="sqlite"/> -->
    <!-- <env name="DB_DATABASE" value=":memory:"/> -->
    <env name="MAIL_MAILER" value="array"/>
    <env name="QUEUE_CONNECTION" value="sync"/>
    <env name="SESSION_DRIVER" value="array"/>
    <env name="TELESCOPE_ENABLED" value="false"/>
</php>

Ara l- DB_CONNECTIONDB_DATABASEliema huma kkummentati? Jekk għandek SQLite fuq is-server tiegħek, l-eħfef azzjoni hija li sempliċement tneħħi l-kumment ta' dawk il-linji u t-testijiet tiegħek jimxu kontra dik id-database fil-memorja.

F'dan it-test ngħidu li l-utent huwa awtentikat b'suċċess u ridirezzjonat lejn il-homepage korretta, iżda nistgħu wkoll nittestjaw id-dejta attwali fid-database.

Minbarra dan il-kodiċi:

$this->assertAuthenticated();
$response->assertRedirect(RouteServiceProvider::HOME);

Nistgħu nużaw ukoll l-affermazzjonijiet tat-test tad-database u agħmel xi ħaġa bħal din:

$this->assertDatabaseCount('users', 1);
 
// Or...
$this->assertDatabaseHas('users', [
    'email' => 'test@example.com',
]);

Eżempju tal-paġna Login

Ejja issa naraw eżempju ieħor ta 'paġna Login ma' Laravel Breeze

tests/Feature/AuthenticationTest.php:

class AuthenticationTest extends TestCase
{
    use RefreshDatabase;
 
    public function test_login_screen_can_be_rendered()
    {
        $response = $this->get('/login');
 
        $response->assertStatus(200);
    }
 
    public function test_users_can_authenticate_using_the_login_screen()
    {
        $user = User::factory()->create();
 
        $response = $this->post('/login', [
            'email' => $user->email,
            'password' => 'password',
        ]);
 
        $this->assertAuthenticated();
        $response->assertRedirect(RouteServiceProvider::HOME);
    }
 
    public function test_users_can_not_authenticate_with_invalid_password()
    {
        $user = User::factory()->create();
 
        $this->post('/login', [
            'email' => $user->email,
            'password' => 'wrong-password',
        ]);
 
        $this->assertGuest();
    }
}

Huwa dwar il-formola tal-login. Il-loġika hija simili għar-reġistrazzjoni, hux? Iżda tliet metodi minflok tnejn, għalhekk dan huwa eżempju ta 'ttestjar ta' xenarji kemm tajbin kif ukoll ħżiena. Għalhekk, il-loġika komuni hija li għandek tittestja ż-żewġ każijiet: meta l-affarijiet imorru tajjeb u meta jfallu.

Newsletter dwar l-innovazzjoni
Titlifx l-aktar aħbarijiet importanti dwar l-innovazzjoni. Irreġistra biex tirċevihom bl-email.

Ukoll, dak li tara f'dan it-test huwa l-użu ta ' Fabbriki tad-Database : Laravel joħloq utent falz ( għal darb'oħra, fuq id-database tat-test aġġornata tiegħek ) u mbagħad jipprova jidħol, bi kredenzjali korretti jew mhux korretti.

Għal darb'oħra, Laravel jiġġenera l-fabbrika predefinita b'data falza għall- Usermudell, barra l-kaxxa.

database/factories/UserFactory.php:

class UserFactory extends Factory
{
    public function definition()
    {
        return [
            'name' => $this->faker->name(),
            'email' => $this->faker->unique()->safeEmail(),
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
            'remember_token' => Str::random(10),
        ];
    }
}

Tara, kemm huma ppreparati affarijiet minn Laravel innifsu, allura jkun faċli għalina li nibdew nittestjaw?

Mela jekk inwettqu php artisan testwara l-installazzjoni ta 'Laravel Breeze, għandna naraw xi ħaġa bħal din:

 PASS  Tests\Unit\ExampleTest
✓ that true is true
 
 PASS  Tests\Feature\Auth\AuthenticationTest
✓ login screen can be rendered
✓ users can authenticate using the login screen
✓ users can not authenticate with invalid password
 
 PASS  Tests\Feature\Auth\EmailVerificationTest
✓ email verification screen can be rendered
✓ email can be verified
✓ email is not verified with invalid hash
 
 PASS  Tests\Feature\Auth\PasswordConfirmationTest
✓ confirm password screen can be rendered
✓ password can be confirmed
✓ password is not confirmed with invalid password
 
 PASS  Tests\Feature\Auth\PasswordResetTest
✓ reset password link screen can be rendered
✓ reset password link can be requested
✓ reset password screen can be rendered
✓ password can be reset with valid token
 
 PASS  Tests\Feature\Auth\RegistrationTest
✓ registration screen can be rendered
✓ new users can register
 
 PASS  Tests\Feature\ExampleTest
✓ the application returns a successful response
 
Tests:  17 passed
Time:   0.61s

Testijiet funzjonali meta mqabbla ma 'testijiet unitarji u oħrajn

Rajt is-subfolders tests/Feature e tests/Unit ?. 

X'inhi d-differenza bejniethom? 

Globalment, barra mill-ekosistema Laravel/PHP, hemm diversi tipi ta 'ttestjar awtomatizzat. Tista' ssib termini bħal:

  • Testijiet unitarji
  • Ittestjar tal-karatteristiċi
  • Testijiet ta' integrazzjoni
  • Testijiet funzjonali
  • Ittestjar minn tarf sa tarf
  • Testijiet ta' aċċettazzjoni
  • Testijiet tad-duħħan
  • eċċ.

Jidher ikkumplikat, u d-differenzi attwali bejn dawn it-tipi ta 'testijiet kultant huma mċajpra. Huwa għalhekk li Laravel issimplifika dawn it-termini konfużi kollha u ġabarhom fi tnejn: unità/karatteristika.

Fi kliem sempliċi, it-testijiet tal-karatteristiċi jippruvaw jesegwixxu l-funzjonalità attwali tal-applikazzjonijiet tiegħek: ikseb il-URL, ċempel l-API, jimita l-imġieba eżatta bħal timla l-formola. It-testijiet tal-karatteristiċi normalment iwettqu l-istess operazzjonijiet jew simili bħal kull utent tal-proġett jagħmel, manwalment, fil-ħajja reali.

It-testijiet unitarji għandhom żewġ tifsiriet. B'mod ġenerali, tista 'ssib li kwalunkwe test awtomatizzat jissejjaħ "ittestjar tal-unità" u l-proċess kollu jista' jissejjaħ "test tal-unità". Iżda fil-kuntest tal-funzjonalità kontra l-unità, dan il-proċess huwa dwar l-ittestjar ta 'unità speċifika ta' kodiċi mhux pubblika, b'mod iżolat. Pereżempju, għandek klassi Laravel b'metodu li jikkalkula xi ħaġa, bħall-prezz totali tal-ordni b'parametri. Għalhekk, it-test tal-unità jiddikjara jekk ir-riżultati korretti jiġux ritornati minn dak il-metodu (unità tal-kodiċi), b'parametri differenti.

Biex tiġġenera test unitarju, trid iżżid bandiera:

php artisan make:test OrderPriceTest --unit

Il-kodiċi ġġenerat huwa l-istess bħat-test ta 'qabel l-unitàdefiSistema Laravel:

class OrderPriceTest extends TestCase
{
    public function test_example()
    {
        $this->assertTrue(true);
    }
}

Kif tistgħu taraw, ma teżistix RefreshDatabase, u dan huwa wieħed minn defil-aktar definizzjonijiet komuni tat-test tal-unità: ma tmissx id-database, taħdem bħala "kaxxa sewda", iżolata mill-applikazzjoni li taħdem.

Nippruvaw nimitaw l-eżempju li semmejt qabel, ejja nimmaġinaw li għandna klassi tas-servizz OrderPrice.

app/Services/OrderPriceService.php:

class OrderPriceService
{
    public function calculatePrice($productId, $quantity, $tax = 0.0)
    {
        // Some kind of calculation logic
    }
}

Imbagħad, it-test unitarju jista' jidher xi ħaġa bħal din:

class OrderPriceTest extends TestCase
{
    public function test_single_product_no_taxes()
    {
        $product = Product::factory()->create(); // generate a fake product
        $price = (new OrderPriceService())->calculatePrice($product->id, 1);
        $this->assertEquals(1, $price);
    }
 
    public function test_single_product_with_taxes()
    {
        $price = (new OrderPriceService())->calculatePrice($product->id, 1, 20);
        $this->assertEquals(1.2, $price);
    }
 
    // More cases with more parameters
}

Fl-esperjenza personali tiegħi mal-proġetti Laravel, il-maġġoranza kbira tat-testijiet huma testijiet tal-Karatteristiċi, mhux testijiet tal-Unità. L-ewwel, trid tittestja jekk l-applikazzjoni tiegħek taħdem, il-mod kif in-nies reali jużawha.

Sussegwentement, jekk għandek kalkoli speċjali jew loġika tista ' definire bħala unità, b'parametri, tista 'toħloq testijiet ta' unità speċifikament għal dak.

Xi drabi, il-kitba tat-testijiet teħtieġ li tiġi mmodifikata l-kodiċi innifsu u li ssir rifactoring biex tagħmilha aktar "testabbli": tissepara l-unitajiet fi klassijiet jew metodi speċjali.

Meta/kif twettaq it-testijiet?

X'inhu l-użu attwali ta 'dan php artisan test, meta għandek tmexxiha?

Hemm approċċi differenti, skont il-fluss tax-xogħol tan-negozju tiegħek, iżda ġeneralment trid tiżgura li t-testijiet kollha huma "ħodor" (jiġifieri mingħajr żbalji) qabel ma timbotta l-bidliet finali tal-kodiċi fir-repożitorju.

Imbagħad, taħdem lokalment fuq il-kompitu tiegħek, u meta taħseb li lest, agħmel xi testijiet biex tiżgura li ma kisret xejn. Ftakar, il-kodiċi tiegħek jista 'jikkawża bugs mhux biss fil-loġika tiegħek iżda wkoll involontarjament jikser xi mġiba oħra fil-kodiċi ta' xi ħadd ieħor miktub twil ilu.

Jekk nieħdu pass 'il quddiem, huwa possibbli li awtomat ħafna affarijiet. B'diversi għodod CI/CD, tista 'tispeċifika t-testijiet biex isiru kull meta xi ħadd jimbotta bidliet għal fergħa Git speċifika jew qabel ma tgħaqqad il-kodiċi fil-fergħa tal-produzzjoni. L-aktar fluss tax-xogħol sempliċi jkun li tuża Github Actions, għandi vidjo separat li jipprova dan.

X'għandek tittestja?

Hemm opinjonijiet differenti dwar kemm għandha tkun kbira l-hekk imsejħa "kopertura tat-test": ipprova kull operazzjoni u każ possibbli f'kull paġna, jew illimita x-xogħol għall-aktar partijiet importanti.

Fil-fatt, dan huwa fejn naqbel ma 'nies li jakkużaw l-ittestjar awtomatizzat li jieħdu aktar ħin milli jipprovdu benefiċċju attwali. Dan jista' jiġri jekk tikteb testijiet għal kull dettall. Cela dit, jista 'jkun meħtieġ mill-proġett tiegħek: il-mistoqsija ewlenija hija "x'inhu l-prezz ta' żball potenzjali".

Fi kliem ieħor, għandek bżonn tipprijoritizza l-isforzi tal-ittestjar tiegħek billi tistaqsi l-mistoqsija "X'jiġri jekk dan il-kodiċi falla?" Jekk is-sistema tal-ħlas tiegħek għandha bugs, se jkollha impatt dirett fuq in-negozju. Mela jekk il-funzjonalità tar-rwoli/permessi tiegħek tinkiser, din hija kwistjoni ta 'sigurtà enormi.

Jogħġobni kif poġġih Matt Stauffer waqt konferenza: "L-ewwel trid tittestja dawk l-affarijiet li, jekk ifallu, ikeċċek minn xogħolek." Ovvjament dik hija esaġerazzjoni, imma tieħu l-idea: ipprova l-affarijiet importanti l-ewwel. U mbagħad karatteristiċi oħra, jekk ikollok ħin.

PEST: alternattiva ġdida għal PHPUnit

L-eżempji kollha ta 'hawn fuq huma bbażati fuq l-għodda ta' ttestjar minn qabel Laraveldefilejla: PHPUnit . Iżda matul is-snin dehru għodod oħra fl-ekosistema u waħda mill-aħħar popolari hija PEST . Maħluq minn impjegat uffiċjali ta 'Laravel Nuno Maduro , timmira li tissimplifika s-sintassi, u tagħmel il-kodiċi tal-kitba għat-testijiet saħansitra aktar mgħaġġel.

Taħt il-barnuża, tiġri su PHPUnit, bħala saff addizzjonali, qed jipprova jimminimizza xi partijiet ripetuti minn qabeldefiaħħar tal-kodiċi PHPUnit.

Ejja nħarsu lejn eżempju. Ftakar il-klassi tat-test ta 'qabel il-karatteristikadefinited f'Laravel? Infakkarkom:

namespace Tests\Feature;
 
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
 
class ExampleTest extends TestCase
{
    public function test_the_application_returns_a_successful_response()
    {
        $response = $this->get('/');
 
        $response->assertStatus(200);
    }
}

Taf kif jidher l-istess test b'PEST?

test('the application returns a successful response')->get('/')->assertStatus(200);

Iva, linja WIEĦED ta 'kodiċi u dak hu. Allura, l-għan ta 'PEST huwa li tneħħi l-overhead ta':

  • Noħolqu klassijiet u metodi għal kollox;
  • Estensjoni tal-każ tat-test;
  • Billi tpoġġi azzjonijiet fuq linji separati: f'PEST tista' tikkatinahom flimkien.

Biex tiġġenera test PEST f'Laravel, trid tispeċifika bandiera addizzjonali:

php artisan make:test HomepageTest --pest

Sa minn din il-kitba, PEST huwa pjuttost popolari fost l-iżviluppaturi ta 'Laravel, iżda hija l-preferenza personali tiegħek jekk tużax din l-għodda addizzjonali u titgħallem is-sintassi tagħha, kif ukoll nota PHPUnit.

BlogInnovazione.it

Newsletter dwar l-innovazzjoni
Titlifx l-aktar aħbarijiet importanti dwar l-innovazzjoni. Irreġistra biex tirċevihom bl-email.

Artikoli riċenti

Il-Futur qiegħed Hawnhekk: Kif l-Industrija tat-Tbaħħir qed tirrivoluzzjona l-Ekonomija Globali

Is-settur navali huwa qawwa ekonomika globali vera, li navigat lejn suq ta’ 150 biljun...

1 Mejju 2024

Il-pubblikaturi u l-OpenAI jiffirmaw ftehimiet biex jirregolaw il-fluss tal-informazzjoni pproċessata mill-Intelliġenza Artifiċjali

It-Tnejn li għadda, il-Financial Times ħabbret ftehim mal-OpenAI. FT tagħti liċenzja għall-ġurnaliżmu ta’ klassi dinjija tagħha...

April 30 2024

Ħlasijiet Online: Hawn Kif Is-Servizzi ta' Streaming Jagħmel Inti Tħallas Għal Dejjem

Miljuni ta 'nies iħallsu għal servizzi ta' streaming, iħallsu miżati ta 'abbonament ta' kull xahar. Hija opinjoni komuni li inti...

April 29 2024

Veeam għandu l-aktar appoġġ komprensiv għar-ransomware, mill-protezzjoni għar-rispons u l-irkupru

Coveware minn Veeam se jkompli jipprovdi servizzi ta' rispons għal inċidenti ta' estorsjoni ċibernetika. Coveware se joffri forensiċi u kapaċitajiet ta' rimedju...

April 23 2024