Eseguire un singolo test json in program01

c
campobassof (1060 points)
2 4 14
asked Nov 21, 2021 in Programmare in Python by campobassof (1,060 points)
Come posso fare per testare il mio programma richiamando sotto l'if main un singolo test json senza doverne copiare il testo (impossibile con file grandi)?
124 views

2 Answers

simonemignanelli (2130 points)
1 2 22
answered Nov 21, 2021 by simonemignanelli (2,130 points)

Nel caso dei file json basta richiamare la funzione del programma principale sotto a main ed inviare i parametri del test ricavati manualmente. Per fare ciò, a meno che non esista un comando apposito, importi la libreria json e leggi il file, di conseguenza:

import json
f = open('test.json')
data = json.load(f)

(stessa cosa puoi fare utilizzando "with")
e da li puoi ricavare i valori utilizzando l'indice, esempio:

data['matches'] 

spero di essere stato chiaro.

c
campobassof (1060 points)
2 4 14
commented Nov 21, 2021 by campobassof (1,060 points)
Grazie mille. La prima parte è chiarassima. La seconda non molto. Creo una lista con le "chiavi"?
simonemignanelli (2130 points)
1 2 22
commented Nov 21, 2021 by simonemignanelli (2,130 points)
Nono una volta fatta la parte sopra avrai il file json sotto forma di oggetto, c'ho significa che per ottenere i parametri devi prendere i valori tramite l'indice, ovvero se il test.json ha una struttura del genere:
{
  "test_emoji_5_10_100": {
    "matches": [
      "↕❌⏩♾⛑▪❤☎ ☺✊",
      "➗⤵☠⏬❕☔☀ ⚪©☪",
      "♋♀⏯⏩☘♣ ⛹❤➕⚔",
      "⚰♻ ✡⚗⏸⏱⏱✂☃♏",
      "✉➡♻☣✝ ‼⤵⚖⏭◀"
     ],
    "k": 100,
    "expected": [3,0,1,2,4]
  }
}
Allora per ricavare matches dovrai fare -> data["test_emoji_5_10_100"]["matches"]
Sempre prendendo come esempio l'hw2-req passi sotto a main la funzione:
print(ex(data["test_emoji_5_10_100"]["matches"], data["test_emoji_5_10_100"]["k"]))
c
campobassof (1060 points)
2 4 14
commented Nov 21, 2021 by campobassof (1,060 points)
Ah, perfetto! Ci ero quasi arrivato. Mancava la parte del nome della struttura. Grazie!
Exyss (21390 points)
1 2 79
answered Nov 21, 2021 by Exyss (21,390 points)

In alternativa alla soluzione di @simonemignanelli, puoi anche eseguire un singolo test in questo modo (che tuttavia non funziona sotto "if __name__"):

  • [OPZIONALE] Attivare la debug mode nei test (dunque riabilitando i print e disabilitando i timeout) settando la variabile DEBUG=True nel file test_01.py
  • Utilizzare nell'Anaconda Prompt il comando pytest -v test_01.py -k <nome_del_test>, come indicato dal professore stesso in questo thread