gpt4 book ai didi

java - 在 java 中模拟 Cipher 时出错

转载 作者:行者123 更新时间:2023-11-30 10:42:26 26 4
gpt4 key购买 nike

为了进行测试,我模拟了一个 Cipher 对象,但是当我运行测试时,它失败了,因为它运行的是密码而不是模拟。

所以,我编写了一个非常简单的测试,当我运行它时,总是失败。

我的测试代码是:

import javax.crypto.Cipher;

import org.junit.Test;
import org.mockito.Mockito;

public class SimpleTest {
@Test
public void simpleTest() throws Exception {
Cipher cipher = Mockito.mock(Cipher.class);
cipher.doFinal(null);
assertTrue(true);
}
}

以及产生的异常:

java.lang.IllegalStateException: Cipher not initialized
at javax.crypto.Cipher.checkCipherState(Cipher.java:1750)
at javax.crypto.Cipher.doFinal(Cipher.java:2157)
at SimpleTest.simpleTest(SimpleTest.java:12)
...

doFinal为什么会被执行?

最佳答案

我傻了。

感谢@JBnizet 和@ShmulikKlein,他们是对的。

doFinal 方法,顾名思义,是一个 final 方法,它不能用 Mockito 模拟。

我试着用 PowerMokito 来做这件事,它工作正常。

import static org.junit.Assert.assertTrue;

import javax.crypto.Cipher;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest(Cipher.class)
public class SimpleTest {
@Test
public void simpleTest() throws Exception {
Cipher cipher = PowerMockito.mock(Cipher.class);
PowerMockito.when(cipher.doFinal(null)).thenReturn(null);
cipher.doFinal(null);
assertTrue(true);
}
}

谢谢!

关于java - 在 java 中模拟 Cipher 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38140668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com