Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Eseguire un singolo test json in program01

c
campobassof (1060 points)
3 4 14
in Programmare in Python by (1.1k 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)?
351 views

2 Answers

simonemignanelli (2130 points)
1 2 22
by (2.1k 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)
3 4 14
by (1.1k points)
Grazie mille. La prima parte è chiarassima. La seconda non molto. Creo una lista con le "chiavi"?
simonemignanelli (2130 points)
1 2 22
by (2.1k 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)
3 4 14
by (1.1k points)
Ah, perfetto! Ci ero quasi arrivato. Mancava la parte del nome della struttura. Grazie!
Exyss (21510 points)
1 2 79
by (21.5k 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