2017-03-12 125 views
-2

我想测试一个使用Junit的私有构造函数的注册号类。由于测试私有构造函数的设计很糟糕,因此我正在测试getInstance方法。但是,我有语法错误,如:Junit测试getInstance方法

final RegistrationNo reg = RegistrationNo.getInstance(); 

以下是我的完整注册类。

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; 
    } 

任何人都可以提供关于如何测试呢?作为测试类,我也没有做什么,说实话其它的代码below.to是提醒说实话我不知道前进的道路。

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(); 
    } 
} 

上面的代码是我所有的。我发现无法以任何形状或形式创建registrationNo类的实例。

+1

请提供有关您收到的错误的更多信息。并格式化您的代码。目前很难阅读。 –

+0

我得到的错误是RegistrationNo无法解析为类型。请注意,我在其他课程中没有任何问题地使用过该课程的实例。 – Jazztheman

+0

发布了一个完整的重现问题的简单示例。它应该包含两个相关的类。 –

回答

0

您无法从不在默认包中的类访问默认包中的类。这是您永远不应该将类放在默认包中的原因之一。

0

您的测试位于名为testing的软件包中。我假设你的RegistrationNo课程存在于其他一些包中。因此,您必须将其导入到您的测试中:

import your.package.RegistrationNo;