Junit测试getInstance方法

时间:2017-03-12 09:44:05

标签: java

我正在尝试使用Junit测试具有私有构造函数的注册号码类。由于测试私有构造函数的设计不好,我正在测试getInstance方法。但是,我有语法错误,例如:

final RegistrationNo reg = RegistrationNo.getInstance();

以下是我的完整RegistrationNo课程。

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

任何人都可以就如何测试这一点提供建议吗?对于测试类,我没有做太多的事实,除了下面的代码之外。说实话我不知道前进的道路。

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类的实例。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您的测试位于名为testing的程序包中。我假设您的RegistrationNo课程住在其他一些课程中。所以你必须将它导入你的测试:

import your.package.RegistrationNo;