我正在尝试使用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类的实例。
答案 0 :(得分:0)
您无法从不在默认包中的类访问默认包中的类。这是你永远不应该把类放在默认包中的原因之一。
答案 1 :(得分:0)
您的测试位于名为testing
的程序包中。我假设您的RegistrationNo
课程住在其他一些课程中。所以你必须将它导入你的测试:
import your.package.RegistrationNo;