Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-03-2010, 19:03   #1
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2782
[JAVA] JUnit: testare metodi privati

Sto iniziando a usare JUnit e mi chiedevo come dovrei fare per testare i metodi privati delle mie classi. Tra l'altro come conviene organizzare i TestCase e i TestSuite?
In questo momento ho un progetto con i seguenti package:

mhs
mhs.card
mhs.hand

Tanto per cominciare volevo creare un TestCase per la classe Card che è contenuta in mhs.card
Ingenuamente ho creato un package test.mhs.card e vi ho messo la classe CardTest che ora testa i metodi pubblici di Card. Vorrei però avere anche la possibilità di testare i metodi privati, solo che ovviamente non ho accesso ad essi da una classe esterna. Come dovrei procedere?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2010, 19:05   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Stai usando un IDE particolare, che so, NetBeans?
Perchè in quel caso puoi semplicemente fare click tasto destro sulla classe per la quale vuoi creare lo unit test e nel menu contestuale trovi un voce apposita...
@EDIT: click destro -> Tools -> Create JUnit Test
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2010, 19:11   #3
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2782
Grazie per la risposta. Sto usando Eclipse e c'è una voce simile ed è quella con cui ho creato la classe CardTest in test.mhs.card solo che come dicevo in questo modo non posso testare i metodi privati. In teoria dovrei fare una classe di test innestata in Card ma vorrei tenere separati i test da ciò che viene testato. Questo però è un vincolo che ingenuamente mi sono posto da solo, probabilmente bisogna ragionare in modo diverso. Tu in genere come procedi per creare le classi di test e dove le collochi nella struttura dei package?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2010, 19:14   #4
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Per quanto riguarda lo unit test, testare i metodi privati della classe sotto test non ha molto senso.
Leggi questo.

@EDIT:
Premessa: io uso NetBeans.
In questo IDE, le classi per lo unit test delle classi dell'applicazione vengono automaticamente create nello stesso package della classe da testare.
L'IDE poi, nella vista ad albero del progetto, tiene separata la visualizzazione delle classi vere e proprio da quelle di test tramite due diversi nodi di espansione.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 05-03-2010 alle 19:18.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2010, 19:22   #5
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2782
Quindi molto probabilmente ho fatto un errore di progettazione... Ma è davvero così strano avere la necessità di testare un metodo privato se la progettazione è stata fatta come si deve? Potresti farmi qualche esempio?
E per quanto riguarda la posizione all'interno dei package secondo te va bene come ho fatto o è meglio mettere la classe di test e la classe testata nello stesso package?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2010, 19:31   #6
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Quindi molto probabilmente ho fatto un errore di progettazione... Ma è davvero così strano avere la necessità di testare un metodo privato se la progettazione è stata fatta come si deve? Potresti farmi qualche esempio?
Non lo so, non ho una esperienza sufficiente in fatto di Unit Test per dire qualcosa con cognizione di causa.
Al massimo posso fare un considerazione: lo Unit Test di una classe testa esattamente un sola classe.
I metodi privati di quella classe sono prima o poi chiamati internamente dai metodi pubblici/protected*/default della classe (i metodi privati di una classe non vengono nemmeno ereditati da eventuali sotto-classi: dunque non possono che essere chiamati da altri metodi della classe stessa).
Testando tutta l'interfaccia pubblica/protected*/default della classe, in pratica, copri anche i metodi privati.

Quando poi un test fallisce, sai esattamente quale metodo (pubblico) lo ha fatto fallire (e anche perchè). Non penso quindi ci sia questa neccesità di testare esplicitamente i metodi privati. (Se proprio devi ti tocca usare gli escamotage descritti nella faq che ho linkato).

* vedi qua sotto:

Quote:
Originariamente inviato da wingman87 Guarda i messaggi
E per quanto riguarda la posizione all'interno dei package secondo te va bene come ho fatto o è meglio mettere la classe di test e la classe testata nello stesso package?
Sempre in quella faq, domanda precedente a quella rimandata dal link.
Consigliano di metterli nello stesso package: in questo modo, dalla classe di test hai accesso anche hai metodi definiti con specificatore di accesso di default e protected (restano appunto "fuori portata" solamente quelli dichiarati private).
Il che giustifica anche il discorso fatto sopra.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 05-03-2010 alle 21:31. Motivo: corretta l'ultima affermazione.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2010, 19:33   #7
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2782
Grazie, sei stato gentilissimo e mi hai tolto tutti i dubbi.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2010, 19:36   #8
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Grazie, sei stato gentilissimo e mi hai tolto tutti i dubbi.
You are welcome
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2010, 22:23   #9
khelidan1980
Senior Member
 
L'Avatar di khelidan1980
 
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
come appunto ti hanno detto se hai la necessità di testare metodi privati potrebbe essere che ci sia qualcosa da sistemare in fase di progettazione comunque non è detto, alcuni metodi privati possono essere molto complessi e richiedere di essere testati singolarmente, io in genere uso la reflection per testare il metodi privati, se cerchi su google trovi esempi da cui prender spunto, non è complicato
__________________
Khelidan

Ultima modifica di khelidan1980 : 05-03-2010 alle 22:26.
khelidan1980 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2010, 23:25   #10
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da khelidan1980 Guarda i messaggi
...
io in genere uso la reflection per testare il metodi privati, se cerchi su google trovi esempi da cui prender spunto, non è complicato
Posto un link (è il mio hobby preferito) ad un articolo interessante che illustra pro/contro di quattro possibili soluzioni per testare metodi privati:
Quote:
* Don't test private methods.
* Give the methods package access.
* Use a nested test class.
* Use reflection.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Incat inizia i test dell'incredibile tra...
LG Sound Suite: al CES il sistema audio ...
Avengers Doomsday, il primo trailer &egr...
La crisi delle memorie non farà sconti a...
Il trailer più atteso dell'anno &...
I gamer vogliono i monitor OLED: sopratt...
Samsung alza l’asticella dei televisori ...
Energie rinnovabili 2025: quasi 42% del ...
Le auto elettriche volano in tutta Europ...
Nuovo look per la finestra Esegui su Win...
Rad Power Bikes è in bancarotta: ...
Cronos: The New Dawn diventa più ...
Riot Games alza lasticella dell'anti-che...
Netflix dice addio a 111 titoli original...
Samsung prepara un foldable più l...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:08.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v