Come testare un metodo di livello superiore

2

Sto provando a testare un piccolo programma che ho scritto.
Il mio problema è che non riesco a vedere un modo semplice per testare la mia classe di livello superiore (Matcher) che espone un singolo metodo pubblico (MatchAll).
Ho prove per le mie classi interne, ma sono in gran parte banali.

Permettetemi di presentare un problema e uno schizzo della mia soluzione:

Problema: una lista di persone, un elenco delle loro squadre preferite e classifiche per ogni squadra, trova una corrispondenza che massimizzi sia il rango di squadra che tiene conto delle preferenze dei candidati.

La mia soluzione:

  • Candidato: contiene un elenco di squadre preferite e un punteggio di classifica per ogni rispettivo team
  • Squadra - contiene un elenco di candidati accettati. Finché la squadra ha spazio, accetta qualsiasi candidato. Una volta che si riempie, accetta solo candidati che migliorano il suo punteggio. Elimina inoltre il candidato con il punteggio più basso.

Il team espone i seguenti metodi:

  1. IsBetterMatch
  2. Aggiungi
  3. PurgeWeakest

Corrispondente: contiene l'elenco di candidati e l'elenco di squadre e implementa la logica fondamentale dell'assegnazione di candidati a una squadra.

La mia logica di corrispondenza è la seguente (Pseudocodice):

function Matchall()
    while candidates != empty
        c <- candidates.getFirst()      
        for each t in c.teams
            betterMatch = t.IsBetterMatch(c)
            if betterMatch
                weakest = t.purgeWeakest()
                t.Add(c)
                candidates.add(weakest)

Supponendo che i metodi del team siano stati accuratamente testati, come suggeriresti di testare questa funzione?

I test a cui posso pensare per questa funzione sono molto complessi sia per formulare che per impostare.

Ad esempio:

Quando due candidati hanno lo stesso grado e vogliono la stessa squadra e la squadra ha spazio solo per uno, il primo deve essere assegnato alla squadra. La seconda dovrebbe essere assegnata a un'altra squadra nella sua lista delle preferenze.

Mi sembra che rientrino maggiormente nella categoria dei test di integrazione, motivo per cui sono confuso. Ho capito che i test unitari dovrebbero essere brevi e semplici da scrivere

    
posta DanielS 16.04.2015 - 15:04
fonte

1 risposta

2

Per testare un metodo che non accetta argomenti e non restituisce risultati, devi armeggiare con lo stato su cui lavora, invocarlo e quindi esaminare lo stato che ha modificato per effetto collaterale. Consiglio vivamente di non farlo, e se è così che deve essere il tuo metodo di alto livello, allora per quanto mi riguarda non è perseguibile. (Non obiettivamente non testabile, ma non vale lo sforzo a mio parere.)

Ciò che puoi fare, tuttavia, è trasformare il tuo metodo di primo livello in nient'altro che un wrapper che richiama semplicemente un metodo di livello medio che accetta argomenti, lavora su nient'altro che gli argomenti che accetta e restituisce un risultato.

Quindi, puoi testare il metodo di livello medio passandogli gli argomenti di esempio e verificando che restituisca i risultati previsti.

    
risposta data 16.04.2015 - 16:16
fonte

Leggi altre domande sui tag