Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
OPPO ha portato in Italia, dal 1° luglio 2026, Reno16 Pro: display AMOLED da 6,32 pollici a 144Hz, tripla fotocamera con sensore principale da 200 megapixel, chip Dimensity 8550 Super e batteria da 6000mAh, al prezzo di lancio di 899 euro. Lo abbiamo provato per due settimane insieme al nuovo accessorio Bubble, per capire se la formula compatta della serie regge ancora di fronte a un listino da 1099 euro
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
MiniLED di fascia media con local dimming a 192 zone, 144 Hz nativi e audio firmato Devialet. La prova strumentale riscontra colori affidabili e gaming reattivo, per un prodotto molto accessibile e convincente. Ma la soundbar aggiuntiva è quasi d'obbligo
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Amazon porta i colori sul suo Kindle da scrittura più grande: schermo Colorsoft a 11 pollici, processore quad-core, penna premium più reattiva e strumenti IA per le note, sono le note salienti. Il salto di prezzo rispetto al modello in bianco e nero si fa sentire, anche se la percezione è quella di trovarsi di fronte a un prodotto di fascia altissima, per veri appassionati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-01-2008, 20:49   #1
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
[PAIR] Fran vs Anonimo - The Beginning

Il task consiste nel restituire un oggetto NullAudio, che implementa l'interfaccia AudioInterface, e che fa nulla, quando la creazione di un oggetto Audio fallisce.

Questo e' il test che alla fine del task deve passare:

Codice:
    public void testAudioCreationFailure()
    {
        AudioFactory audioFactory = new FailingAudioFactory();

        AudioInterface audio = environment.createAudio(audioFactory);
        assertTrue(audio.isNull());
    }
Il test e' nel repository commentato. Non puo' passare perche' mancano tante cose all'appello:

- il metodo isNull() in AudioInterface
- la classe audioFactory()
- una versione del metodo createAudio() di environment che accetti un oggetto AudioFactory

Manca inoltre una classe NullAudio.

Partiamo con il metodo isNull(), questo e' il test in TestAudio.java:

Codice:
    public void setUp()
    {
        audio = MockAudio.create();
    }

    public void testIsNullNotTrueForMockAudio()
    {
        assertFalse(audio.isNull());
    }
fek è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2008, 21:19   #2
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Eccomi.

Per permettere la compilazione del test è stato aggiunto un metodo all'interfaccia AudioInterface :

Codice:
   boolean isNull();
Successivamente sono stati aggiunti i seguenti metodi in OpenALAudio :

Codice:
    public boolean isNull()
    {
            return false;
    }
e in MockAudio :

Codice:
    public boolean isNull() 
    {
        return true;
    }
A questo punto il test compilava, ma falliva.

Per farlo passare è stato cambiato in MockAudio in questo modo :

Codice:
    public boolean isNull()
    {
            return false;
    }

Test passato e avanti il prossimo
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2008, 21:21   #3
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Il prossimo test richiede una classe NullAudio che sia nulla:

Codice:
    public void testNullAudioIsNull()
    {
        audio = new NullAudio();
        assertTrue(audio.isNull());
    }
fek è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2008, 21:30   #4
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Ok, creata una classe NullAudio che implementa AudioInterface.

Eclipse ha creato automaticamente questa classe :

Codice:
package it.diamonds.engine.audio;

public class NullAudio implements AudioInterface
{

    public Sound createSound(String name)
    {
        // TODO Auto-generated method stub
        return null;
    }


    public boolean isCreated()
    {
        // TODO Auto-generated method stub
        return false;
    }


    public boolean isInitialised()
    {
        // TODO Auto-generated method stub
        return false;
    }


    public boolean isMusicPlaying()
    {
        // TODO Auto-generated method stub
        return false;
    }


    public boolean isNull()
    {
        // TODO Auto-generated method stub
        return false;
    }


    public void playMusic()
    {
        // TODO Auto-generated method stub

    }


    public void shutDown()
    {
        // TODO Auto-generated method stub

    }


    public void stopMusic()
    {
        // TODO Auto-generated method stub

    }

}
cambiando l'implementazione di "isNull()" in :

Codice:
    public boolean isNull()
    {
        return true;
    }
Il test passa.
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2008, 21:39   #5
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Ora ci serve l'AudioFactory, questo e' il test:

Codice:
package it.diamonds.tests.engine;


import junit.framework.TestCase;

public class TestAudioFactory extends TestCase
{
    public void testAudioFactoryCreate()
    {
        AudioFactory factory = new AudioFactory();
        assertNotNull(factory.create());
    }
}
fek è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2008, 21:50   #6
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Ok

Creazione di una classe it.diamonds.engine.AudioFactory :

Codice:
package it.diamonds.engine;

public class AudioFactory
{
    public Object create() 
    {
        return null;
    }
}
Il test fallisce.

Cambiando in :

Codice:
    public Object create() 
    {
        return 0;
    }
Il test riesce
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2008, 21:52   #7
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
C'e' un bug in NullAudio, faccio prima a metterti il test che a spiegartelo:

Codice:
package it.diamonds.tests.engine.audio;

import it.diamonds.engine.audio.AudioInterface;
import it.diamonds.engine.audio.NullAudio;
import junit.framework.TestCase;

public class TestNullAudio extends TestCase
{

    public void testNullAudioIsCreated()
    {
        AudioInterface audio = new NullAudio();
        assertTrue(audio.isCreated());
    }
}
fek è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2008, 22:01   #8
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Non avevo mai visto un bug così

Il bug è stato risolto cambiando in it.diamonds.engine.audio.NullAudio :

Codice:
    public boolean isCreated()
    {
        return false;
    }
in:

Codice:
    public boolean isCreated()
    {
        return true;
    }
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2008, 22:09   #9
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Prossimo test:

Codice:
package it.diamonds.tests.engine;


import it.diamonds.engine.AudioFactory;
import junit.framework.TestCase;

public class TestAudioFactory extends TestCase
{
    public void testAudioFactoryCreate()
    {
        AudioFactory factory = new AudioFactory();
        assertNotNull(factory.create());
    }

    public void testAudioFactoryCreateMockAudio()
    {
        AudioFactory factory = new MockAudioFactory();
        assertNotNull((MockAudio) factory.create());
    }

}
fek è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2008, 22:21   #10
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Creata la classe it.diamonds.tests.mocks.MockAudioFactory :

Codice:
public class MockAudioFactory extends AudioFactory
{
}
Da un errore di compilazione perchè la AudioFactory.create() di fatto ritorna un Integer.

Aggiungendo un override della create nella classe :

Codice:
    public AudioInterface create() 
    {
        return MockAudio.create();
    }
Il test riesce.
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2008, 22:24   #11
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Chiudiamo il conto con AudioFactory

Codice:
package it.diamonds.tests.engine;


import it.diamonds.engine.AudioFactory;
import it.diamonds.engine.audio.AudioInterface;
import it.diamonds.tests.mocks.MockAudio;
import it.diamonds.tests.mocks.MockAudioFactory;
import junit.framework.TestCase;

public class TestAudioFactory extends TestCase
{
    public void testAudioFactoryCreate()
    {
        AudioFactory factory = new AudioFactory();
        assertNotNull(factory.create());
    }

    public void testAudioFactoryCreateMockAudio()
    {
        AudioFactory factory = new MockAudioFactory();
        assertNotNull((MockAudio) factory.create());
    }

    public void testAudioFactoryCreateAudioInterface()
    {
        AudioFactory factory = new AudioFactory();
        assertNotNull((AudioInterface) factory.create());
    }

}
fek è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2008, 22:32   #12
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Cambiamo :

Codice:
     public Object create()
     {
           return 0;
     }
in:

Codice:
    public AudioInterface create() 
    {
        return new NullAudio();
    }
Test passato!
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2008, 22:33   #13
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
In TestEnvironment.java, un test che chieda di passare un AudioFactory al metodo createAudio di Environment:

Codice:
    public void testAudioCreationWithFactory()
    {
        AudioFactory audioFactory = new AudioFactory();
        assertNotNull((AudioInterface) environment.createAudio(audioFactory));
    }
fek è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2008, 22:39   #14
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Aggiunto il metodo in it.diamonds.Envionment :

Codice:
    public AudioInterface createAudio(AudioFactory factory)
    {
        return factory.create();
    }
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2008, 22:43   #15
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Ora creiamo una classe mock che ritorni un eccezione quando tenta di creare un Audio.
Questo e' il test:

Codice:
    public void testFailingAudioFactoryMockException()
    {
        try
        {
            AudioFactory audioFactory = new FailingAudioFactoryMock();
            audioFactory.create();
            fail();
        }
        catch (RuntimeException e)
        {
        }
    }
fek è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2008, 22:50   #16
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Creata la classe it.diamonds.tests.mocks.FailingAudioFactoryMock :

Codice:
public class FailingAudioFactoryMock extends AudioFactory
{
    public AudioInterface create()
    {
        throw new RuntimeException();
    }
}
Il Deathmatch continua ....
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2008, 22:54   #17
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Proviamo a dare un colpo all'ultimo test, vediamo se si riesce a far passare con un paio di righe di codice:

Codice:
   public void testAudioCreationFailure()
    {
        AudioFactory audioFactory = new FailingAudioFactoryMock();

        AudioInterface audio = environment.createAudio(audioFactory);
        assertTrue(audio.isNull());
    }
fek è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2008, 23:00   #18
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
In it.diamonds.Environment la funzione createAudio(AudioFactory) è stata cambiata così :

Codice:
    public AudioInterface createAudio(AudioFactory factory)
    {
      return new NullAudio();
    }
Adesso il test passa.
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2008, 23:04   #19
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Questo vuol dire che il primo test di verifica che ho scritto non dava abbastanza informazioni, ci serve un altro test:

Codice:
    public void testAudioNotNullCreationWithFactory()
    {
        AudioFactory audioFactory = new MockAudioFactory();
        AudioInterface audio = environment.createAudio(audioFactory);
        assertFalse(audio.isNull());
    }
fek è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2008, 23:36   #20
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Dopo grandi ed epiche lotte intestine tra Eclipse e il repository SVN ecco le modifiche al codice

Metodo Environment.createAudio(AudioFactory)

Codice:
    public AudioInterface createAudio(AudioFactory factory)
    {
        try
        {
            audio = factory.create();
        } catch (RuntimeException e)
        {
            audio = new NullAudio();
        }
        
        return audio;
    }
Uomo 1 Macchina 0
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione Reno16 Pro: il compatto di OPPO punta su fotocam...
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto Kindle Scribe Colorsoft: riduce le cornici e div...
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Anche T-Mobile abbandona VMware e migra ...
In Italia crescono gli investimenti nell...
Samsung combina IA e quantum computing p...
Anthropic ammette: Claude Code usa un ap...
L'IA costa sempre di più: AWS aum...
Google prepara il blocco delle app non v...
Amazfit aggiorna il Cheetah 2 Ultra: ric...
L'FAA apre ai voli commerciali supersoni...
Amazon ha già abbastanza satelliti per a...
A2A ed Equinix uniscono le forze per rec...
Apple ha creato la crisi delle memorie? ...
GPU subito in cambio di una quota dei ri...
Firefly Aerospace potrà lanciare ...
Intesa Sanpaolo sposta i sistemi IT core...
Visa, Mastercard e Coinbase lanciano Ope...
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: 21:00.


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