Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Sono molte le novità che ASUS ha scelto di presentare al CES 2026 di Las Vegas, partendo da una gamma di soluzioni NUC con varie opzioni di processore passando sino agli schermi gaming con tecnologia OLED. Il tutto senza dimenticare le periferiche di input della gamma ROG e le soluzioni legate alla connettività domestica
Le novità ASUS per il 2026 nel settore dei PC desktop
Le novità ASUS per il 2026 nel settore dei PC desktop
Molte le novità anticipate da ASUS per il 2026 al CES di Las Vegas: da schede madri per processori AMD Ryzen top di gamma a chassis e ventole, passando per i kit di raffreddamento all in one integrati sino a una nuova scheda video GeForce RTX 5090. In sottofondo il tema dell'intelligenza artificiale con una workstation molto potente per installazioni non in datacenter
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-01-2008, 21: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, 22: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, 22: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, 22: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, 22: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, 22: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, 22: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, 23: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, 23: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, 23: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, 23: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, 23: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, 23: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, 23: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, 23: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, 23: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, 23: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 25-01-2008, 00: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 25-01-2008, 00: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 25-01-2008, 00: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


Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Le novità MSI del 2026 per i videogiocatori Le novità MSI del 2026 per i videogiocato...
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers I nuovi schermi QD-OLED di quinta generazione di...
Zeekr apre gli ordini per la station wag...
Redstone su RDNA 3? Non è nei pia...
Tutti su Epic Games Store, ma nessuno co...
ChatGPT Jobs: l'IA forse ci ruberà...
Lo sviluppo AAA è fuori controllo...
ASUS RTX 5090 ROG Matrix: un lavoro di f...
Anche lo shopping diventa 'agentico': Go...
Caos motori in Formula 1, riunione di em...
Walmart porta Gemini di Google nello sho...
Obiettivo 2030: così l'Europa pro...
Di lunedì Amazon aggiorna le offe...
Super offerta: Nuki, la serratura Smart ...
Oversonic al CES 2026 con RoBee: il robo...
Da Android al PC in un clic: Microsoft p...
Elon Musk dichiara che l'algoritmo di X ...
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: 14:41.


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