Πώς μπορώ να χρησιμοποιήσω OCMock αντικείμενα με κώδικα που καλεί isKindOfClass;

ψήφοι
7

Θα ήθελα να δοκιμάσει κάποια κώδικα με OCMock.

Τα σπλάχνα του κώδικα ζητά [NSObject isKindOfClass]από την πλαστή αντικείμενο Είμαι παρέχει στον κώδικα, όπως αυτό:

if ([object isKindOfClass:[FancyClass class]]) { ...}

Ωστόσο, όταν παρέχουν OCMockObject με βάση παρωδία που δημιουργήθηκε ως εξής:

mock = [OCMockObject mockForClass:[FancyClass class]];

φαίνεται ότι δεν περάσει το isKindOfClassτεστ.

Οποιεσδήποτε προτάσεις?

Δημοσιεύθηκε 29/01/2009 στις 02:17
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
7

Ο γενικός κανόνας είναι ότι αν είστε καλώντας isKindOfClass:και δεν είστε περνώντας από τις τάξεις plist (π.χ., NSString ή NSNumber), Θα κάνετε λάθος.

Εάν η μέθοδος κάνει δύο ή περισσότερα διαφορετικά πράγματα ανάλογα με το ποια κατηγορία επιχείρημα της είναι, αυτό rend σε πολλαπλές μεθόδους, και να δοκιμάσει κάθε μέθοδο ξεχωριστά.

Αν η μέθοδος κάνει μόνο ένα πράγμα, αλλά πρέπει να αλληλεπιδράσει με το αντικείμενο με διαφορετικό τρόπο ανάλογα με το ποια τάξη είναι, στη συνέχεια:

  1. Κάντε ένα πρωτόκολλο. (Τα Πρωτόκολλα στην Στόχου-C που ονομάζεται «διασυνδέσεις» σε μερικές άλλες γλώσσες OO, όπως η Java.)
  2. Κάντε τις πολλές κατηγορίες συμφωνούν με το πρωτόκολλο. Εάν είναι απαραίτητο, χρησιμοποιήστε κατηγορίες για να προσθέσετε τις απαραίτητες μεθόδους από το εξωτερικό.
  3. Κάντε τη μέθοδο υπό έλεγχο δοκιμής για τη συμμόρφωση με το πρωτόκολλο, στη θέση του σημερινού isKindOfClass:ελέγχου.
  4. Κάντε η μέθοδος υπό δοκιμή χρησιμοποιεί τις μεθόδους στο πρωτόκολλο.
Απαντήθηκε 29/01/2009 στις 03:20
πηγή χρήστη

ψήφοι
2

Τι θα έλεγες:

    [[[mock stub] andReturnValue:OCMOCK_VALUE((BOOL) {YES})] isKindOfClass:[FancyClass class]];
Απαντήθηκε 06/05/2013 στις 19:37
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more