2017-03-12 6 views
-2

Ich versuche, eine Registrierungsnummer-Klasse zu testen, die über einen privaten Konstruktor verfügt, der Junit verwendet. Da es ein schlechtes Design ist, einen privaten Konstruktor zu testen, teste ich die getInstance-Methode. Allerdings habe ich Syntaxfehler, wie zum Beispiel:Junit testet eine getInstance-Methode

final RegistrationNo reg = RegistrationNo.getInstance(); 

Unten ist meine vollständige RegistrationNo Klasse.

public final class RegistrationNo { 

private static final Map<String, RegistrationNo> REGISTR = new HashMap<String,RegistrationNo>(); 

    private final int number; 
    private final char letter; 
    private final String stringRep; 

    private RegistrationNo(int number, char letter, String stringRep) { 
     this.number = number; 
     this.letter = letter; 
     this.stringRep = stringRep; 
    }  

    public static final RegistrationNo getInstance() { 
     final Random Rand = new Random(); 
     int high = 9999; 
     int low = 1000; 

     int numbers = Rand.nextInt(high - low) + low; 

     Character letter = (char)(Rand.nextInt(26) + 'a'); 

     String stringRep = letter + "" + numbers; 

     RegistrationNo n = REGISTR.get(stringRep); 

     if (n == null) { 
      n = new RegistrationNo(numbers, letter, stringRep); 
      REGISTR.put(stringRep, n); 
     } 
     return n; 
    } 

    char getLetter() { 
     return letter; 
    } 

    int getNumbers() { 
     return number; 
    } 

    public String toString() { 
    return stringRep; 
    } 

jedermann zur Verfügung stellen kann beraten, wie ich das testen kann? Wie für die Testklasse, ich habe nach vorn nicht viel getan um ehrlich zu sein andere, dass der Code below.to ehrlich zu sein weiß ich nicht einen Weg .

package testing; 

import static org.junit.Assert.*; 

import java.lang.reflect.Constructor; 
import java.lang.reflect.InvocationTargetException; 

import org.junit.Test; 

public class RegistrationNoTest { 


@Test 
public void test() { 

    final int number = 50; 
    final char letter = 'a'; 
    final String stringRep; 


    RegistrationNoTest test = new RegistrationNoTest(); 

    //final RegistrationNo reg = RegistrationNo.getInstance(); 
    } 
} 

der obige Code ist alles, was ich habe. Ich finde es unmöglich, eine Instanz der Klasse registrationNo in irgendeiner Form zu erstellen.

+1

Bitte geben Sie weitere Informationen über den Fehler, den Sie erhalten. Und formatiere deinen Code ebenfalls. Es ist im Moment schwer zu lesen. –

+0

Der Fehler, den ich erhalte, ist, dass RegistrationNo nicht in einen Typ aufgelöst werden kann. Wohlgemerkt, ich habe Instanzen dieser Klasse in anderen Klassen ohne Problem verwendet – Jazztheman

+0

Veröffentlichen Sie ein vollständiges minimales Beispiel, das das Problem reproduziert. Es sollte die zwei relevanten Klassen enthalten. –

Antwort

0

Sie können nicht auf eine Klasse im Standardpaket von einer Klasse zugreifen, die nicht im Standardpaket enthalten ist. Das ist einer der Gründe, warum Sie niemals Klassen in das Standardpaket aufnehmen sollten.

0

Ihr Test befindet sich in einem Paket namens testing. Ich nehme an, Ihre RegistrationNo Klasse lebt in einem anderen Paket. Also müssen Sie es in Ihren Test importieren:

import your.package.RegistrationNo;