java - 在 Mastermind 和 Random() 类上使用 Mocks 进行单元测试
问题描述
我需要对 Mastermind 进行编程,并且我使用随机密钥完成了此操作。我现在需要对它们进行单元测试。我的 Helperclass 中的控制方法很容易,但我不知道如何使用 Random 类中的 Random 对象或使用 Scanner 类中的对象的方法来真正模拟或测试该方法,代码如下:
public int[] randomKey(){
int[] key = new int[4];
Random random1 = new Random();
for(int i = 0;i < 4;i++) {
key[i] = random1.nextInt(6);//Random Zahl for the Key
}
return key;
}
这就是 HelperClass 中的 Random 方法你如何在那里做 Mock 对象和测试
private String[] guess(){ //Input from guessing
int k = 1;
Scanner eingabewert = new Scanner(System.in);
String[] guess = new String[4];
for(int i = 0; i < 4;i++){
k = 1;
while(k==1) {
System.out.println("Jetzt die " + (i + 1) + ".te Farbe eingeben ");
guess[i] = eingabewert.nextLine();
if(guess[i].equals("red")||guess[i].equals("blue")||guess[i].equals("yellow")||guess[i].equals("green")||guess[i].equals("purple")||guess[i].equals("brown")){
k = 0;
}
}
}
return guess;
}
我无奈的尝试是在带有 Random() 对象的方法的测试类中
@Mock
private java.util.Random random;
@InjectMocks
private HelperClass helperClass;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Test
void testRandomKey(){
Random mockedItem = Mockito.mock(Random.class);
when(mockedItem.nextInt(6)).thenReturn(1);
}
}
我不知道如何继续或基本上理解这实际上是如何工作的,请帮助我并尝试为测试找到一个简短的解决方案。好吧,如果它只是 randomKey 方法。我使用 Intellij Idea 作为 IDE 顺便说一句。
解决方案
问题是您每次都在您的方法中创建 Random 对象。这就是为什么模拟不起作用。尝试将 Random 对象作为类的字段,private Random random = new Random();
然后使用random.nextInt()
. 那么它应该适合你
推荐阅读
- reactjs - 反应中的嵌入式地图
- python - 对于 n 的什么值,g(47,n) 会返回 5?
- java - 从 YAML 加载环境变量到 java
- variables - TCL:使用命名空间名称变量
- javascript - 如何在 JavaScript 中创建一个有状态的、类似队列的函数?
- javascript - 我无法在 if 语句中停止 Interval(不和谐 VoiceState)
- scheduling - 有人可以解释优先 Q 算法吗
- python - 什么是“软关键字”?
- php - 如何在 debian 10(buster) 中配置 apache 2.4 和 laravel 8
- python - 扫描python中的列表列表查找元素上的特定字符