Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer · Lektion

Skriv characterization-tests før refaktorering

Du kan ikke refaktorere uprøvet, ældre kode sikkert. I denne lektion lærer du characterization testing: at fastholde den nuværende adfærd i ældre Objective-C, så refaktoreringer bevarer den.

Lektion 4 af 413 trin

Skriv characterization-tests før refaktorering er en gratis Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer-kurset indeholder 4 lektioner i alt.

Refaktoreringens dilemma

Refaktorering bør ikke ændre adfærden, men ældre kode har ofte ingen test, der beviser, hvad dens adfærd faktisk er. Karakteriseringstest løser dette.

Hvad er en karakteriseringstest

En karakteriseringstest dokumenterer koden, som den faktisk opfører sig, ikke som den burde opføre sig. Den fastlåser det aktuelle output, så enhver ændring bliver synlig.

Find et søm

Et søm er et sted, hvor du kan kalde ind i koden uden at køre hele appen. Offentlige metoder på en klasse er de nemmeste sømme.

@interface PriceCalculator : NSObject
- (NSDecimalNumber *)totalForItems:(NSArray *)items
                         withTax:(double)taxRate;
@end

Opsaml det aktuelle output

Kald metoden med kendte input, og registrér det, den returnerer i dag, selv hvis resultatet ser forkert ud.

// Run once, observe, then assert the observed value
NSDecimalNumber *result = [calc totalForItems:items withTax:0.1];
NSLog(@"observed: %@", result); // -> 22.00

Fastlås det med en assertion

Omdan den observerede værdi til en assertion. Denne test fejler nu, hvis adfærden ændres.

- (void)testTotalCharacterization {
    NSDecimalNumber *r = [calc totalForItems:items withTax:0.1];
    XCTAssertEqualObjects(r, [NSDecimalNumber decimalNumberWithString:@"22.00"]);
}

Dæk kanttilfældene

Tilføj test for tomt input, skat på nul og store værdier. Målet er at omgive koden, så refaktoreringen har et sikkerhedsnet.

Adskil afhængigheder

Hvis en metode rører netværket eller disken, skal du indføre et protocolsøm og indsætte en falsk implementering, så testen bliver hurtig og deterministisk.

@protocol PriceFeed <NSObject>
- (double)currentRate;
@end
// Inject a fake PriceFeed in the test

Refaktorér, mens testene er grønne

Når testene er grønne, skal du refaktorere i små trin og køre testene igen efter hver ændring. En rød test betyder, at du har ændret adfærden, og at du må overveje ændringen igen.

Skeln mellem fejl og adfærd

En karakteriseringstest kan fastlåse en fejl. Det er i orden: Bevar den først, og ret den derefter som en separat, bevidst ændring med sin egen test.

Slet, når den er erstattet

Når korrekte enhedstest beskriver den ønskede adfærd, kan du udfase karakteriseringstest, der blot fastlåste særheder fra den gamle kode.

Opbyg nettet trinvist

Du behøver ikke fuld dækning med det samme. Tilføj kun karakteriseringstest omkring den kode, du skal til at ændre; nettet vokser, efterhånden som du refaktorerer.

Hurtigt tjek

Test din viden om karakteriseringstest.

Opsummering

Du har lært at finde sømme, opsamle og fastlåse den aktuelle adfærd, adskille afhængigheder med protokoller, refaktorere med grønne test og gradvist udvide et testnet omkring ældre Objective-C-kode.

Gratis at komme i gang

Lær Objective-C med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Skriv characterization-tests før refaktorering” gratis?

Ja — hele teksten til “Skriv characterization-tests før refaktorering” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer-kurset, skal du opgradere til CoddyKit PRO. Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Skriv characterization-tests før refaktorering”?

Du kan ikke refaktorere uprøvet, ældre kode sikkert. I denne lektion lærer du characterization testing: at fastholde den nuværende adfærd i ældre Objective-C, så refaktoreringer bevarer den. Du øver dig i Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer?

Der kræves ingen tidligere erfaring. Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Skriv characterization-tests før refaktorering”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer-lektion?

Ja. Alle Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Refaktorering af ældre Objective-C-kode
  2. Håndtering af teknisk gæld
  3. Strategier for langsigtet vedligeholdelse
  4. Skriv characterization-tests før refaktorering
← Tilbage til Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer