Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中模拟密码时出错_Java_Unit Testing_Encryption_Junit - Fatal编程技术网

java中模拟密码时出错

java中模拟密码时出错,java,unit-testing,encryption,junit,Java,Unit Testing,Encryption,Junit,为了进行测试,我模拟了一个密码对象,但是当我运行测试时,它失败了,因为它运行的是密码而不是模拟 所以,我编写了一个非常简单的测试,当我运行它时,总是失败 我的测试代码是: import javax.crypto.Cipher; import org.junit.Test; import org.mockito.Mockito; public class SimpleTest { @Test public void simpleTest() throws Exception {

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

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

我的测试代码是:

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,thery是对的

顾名思义,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);
    }
}

谢谢

Mockito无法模拟最终方法。doFinal()是final。你不应该模仿密码。你应该模拟你自己使用密码的服务。首先,你没有给模拟对象一个
当(…)然后返回(…)
指令,其次,@JBNizet是对的,你为什么要做这样的事情?相关的测试你的代码。不要测试平台。只需注意:名称doFinal()不是这样命名的,因为它是final。它之所以这样命名是因为它执行最终的加密操作。它是最终的,因为类的设计者不希望该方法被子类重写。但这两者完全无关。不要期望final方法的名字中有final。我仍然不明白这个练习的意义。要么根本不应该测试
密码
,要么应该测试自己的
密码pi
实现。