Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    50

    Utilizzo della JUnit con FibonacciSearcher

    Salve a tutti, ho implementato l'algoritmo della ricerca di Fibonacci e mi accingo per la prima volta a testare il tutto con la JUnit. Ma qualcosa non mi è chiaro.
    Innanzitutto questo è l'algoritmo:

    codice:
    public class FibonacciSearcher {
    
    	
    	//METODI
    	
    	//costruttore
    	public FibonacciSearcher(String[] str)//fa la ricerca nell'array str
    	{
    		strings = str;
    		
    		fibonacci = new int[13];
    		
    		fibonacci[0]= 0;
    		fibonacci[1]= 1;
    		
    		for(int i=2;i<13;i++)
    		{
    			fibonacci[i]= fibonacci[i-2]+fibonacci[i-1];
    		}
    		
    		
    	}
    	
    	//_______________________
    	private int lookForFibonacciIndex(int n) { // Restituisce il più piccolo
    		// indice dell'array fibonacci
    		// t.c. fibonacci[m] >= n
    		int m = 0;
    		int i = 0;
    		boolean stop = false;
    
    		while (!stop) {
    			m = fibonacci[i++];
    			stop = (m >= n) || (i == fibonacci.length);
    		}
    
    		return i-1;
    	}
    	//_______________________________________________
    	
    	
    	
    	
    	public int lookFor(String key)
    	{
    		int position = -1;    //-1 significa elem nn trovato
    		int n = strings.length;
    		int k = lookForFibonacciIndex(n);
    		
    		int base = 0;
    		
    		for(int i=0; i<strings.length;i++){
    		if(k<0) return position;  //elemento non trovato
    		//pos = min{base+fibonacci[k-1],n-1};  ??
    		int pos;
    		pos = base + fibonacci[k - 1];
    		pos = pos >= n ? n-1 : pos;
    		String s;
    		s = strings[pos];
    		//Se s == key allora termina: l'elemento è stato trovato in posizione pos;
    		if (s.equalsIgnoreCase(key)) return position = pos;
    		
    		//Se key < s allora k = k-1, base = pos e torna al punto 2.
    		if(key.compareToIgnoreCase(s)<0)  {
    			k=k-1;
    			}
    		//Se key > s allora k = k-2 e torna al punto 2.
    		if(key.compareToIgnoreCase(s)>0) 
    		{
    			base = pos;
    			k =k-2;
    		}
    		
    		}
    		return position;
    	}
    	
    
    	
    	//campi esemplare
    	private String[] strings;
    	private int[] fibonacci; 
    }


    Io so a grosse linee che bisogna scrivere una serie di casi e una serie di risultati aspettati. Poi so che bisogna creare un oggetto da utilizzare nel test e poi distruggerlo con TearDown(), ma qui per esempio io dovrei testare il metodo LookFor, come dovrei fare?
    Poi avrei altre due domande.. i risultati aspettati che scrivo all'inizio si riferiscono a tutto il programma o ai singoli test dei metodi?
    Anche il costruttore si testa?

    codice:
    import junit.framework.TestCase;
    
    
    public class FibonacciSearcherTest extends TestCase {
    
    	String[] cases = {
    			"carta",
    			"bello",
    			"nuovo",
    			"ciao",
    			"delta",
    			"bacio"
    			};
    	
    	String[] expected = {
    			"OK",
    			"KO",
    			"KO",
    			"KO",
    			"OK",
    			"OK"
    	};
    	
    	
    	// Oggetto col quale testare la classe
    		String[] strings;
    	
    	//crea gli oggetti che mi servono per il test
    	protected void setUp() throws Exception {
    		super.setUp();
    		
    		strings = new String[4];
    		
    		strings[0] = "agata";
    		strings[1] = "bacio";
    		strings[2] = "carta";
    		strings[3] = "delta";
    	}
    	
    	//distrugge gli oggetti creati per il test
    	protected void tearDown() throws Exception {
    		super.tearDown();
    		
    		strings = null;
    	}
    //_____________________________________________________________
    	
    	public void testLookFor() {
    		fail("Not yet implemented");
    	}
    
    }
    Grazie mille

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    50
    Ho provato a fare così, ma quando lancio la JUnit mi segnala un errore nel test

    codice:
    import junit.framework.TestCase;
    
    
    public class FibonacciSearcherTest extends TestCase {
    
    	String[] cases = {
    			"carta",
    			"bello",
    			"nuovo",
    			"ciao",
    			"delta",
    			"bacio"
    			};
    	
    	String[] expected = {
    			"OK",
    			"KO",
    			"KO",
    			"KO",
    			"OK",
    			"OK"
    	};
    	
    	
    	// Oggetto col quale testare la classe
    		String[] strings;
    	
    	//crea gli oggetti che mi servono per il test
    	protected void setUp() throws Exception {
    		super.setUp();
    		
    		strings = new String[4];
    		
    		strings[0] = "agata";
    		strings[1] = "bacio";
    		strings[2] = "carta";
    		strings[3] = "delta";
    	}
    	
    	//distrugge gli oggetti creati per il test
    	protected void tearDown() throws Exception {
    		super.tearDown();
    		
    		strings = null;
    	}
    //_____________________________________________________________
    	
    	public void testfoundNotFound() {
    		for (int i = 0; i < cases.length; i++){
    			FibonacciSearcher temp = null;
    			String result = temp.foundNotFound(cases[i]);
    			assertEquals("Caso: " + cases[i] + " Atteso: " + expected[i] + 
    					"risultato: " ,expected[i],result);
    		}
    	}
    
    }
    Dove il metodo è questo:
    codice:
    public String foundNotFound(String key)
    	{
    		
    		String ko = "KO";
    		String ok = "OK";
    		if(lookFor(key)<0) {System.out.println("KO");return ko;}
    		else {System.out.println("OK");return ok;}
    		
    		
    	}

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.