我正在编写JUnit测试用例,在开始只是我写了@Runwith(MockitoJUnitRunner.class),它工作正常。
后来我用@ExtendWith(MockitoExtension.class)进行了更改,它开始给出空指针,我不明白为什么会这样。这里怎么了。
基本代码: ----------------
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.nio.charset.StandardCharsets;
@Component
public class IdpsDecryptorImpl implements IdpsDecryptor {
@Value("${idps.key}")
private String idpsKey;
@Autowired
private IdpsClient idpsClient;
private Key retrieveKey() {
return idpsClient.newKeyHandleLatest(idpsKey);
}
public String decrypt(byte[] encryptedBytes) {
byte[] decryptedBytes;
Key keyHandle = retrieveKey();
try {
decryptedBytes = keyHandle.deriveTwiceAndDecryptLocal(encryptedBytes);
} catch (IdpsException | IdpsCommunicationException ex) {
throw new StorageException(ErrorCode.IDPS_DECRYPT_ERROR, ex.getMessage());
}
return new String(decryptedBytes, StandardCharsets.UTF_8);
}
}
------------------
Test case:
import junit.framework.TestCase;
import org.junit.Assert;
import org.junit.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.test.util.ReflectionTestUtils;
/**
* @author : sprasad13
* @created : 11/07/22, Monday
**/
@ExtendWith(MockitoExtension.class)
//@RunWith(MockitoJUnitRunner.class)
public class IdpsDecryptorImplTest extends TestCase {
@InjectMocks
private IdpsDecryptorImpl idpsDecryptorimpl;
//@Mock
Key key;
@Mock
IdpsClient idpsClient;
private String idpsKey = "testKey";
@Test
public void testDecrypt() throws IdpsCommunicationException, IdpsException {
ReflectionTestUtils.setField(idpsDecryptorimpl,"key",key);
byte[] encryptedBytes = new byte[2];
encryptedBytes[0] = 20;
encryptedBytes[1] = 30;
byte[] decryptedBytes = new byte[2];
decryptedBytes[0] = 97;
decryptedBytes[1] = 98;
Mockito.when(idpsClient.newKeyHandleLatest(idpsKey)).thenReturn(key);
Mockito.when(key.deriveTwiceAndDecryptLocal(encryptedBytes)).thenReturn(decryptedBytes);
Assert.assertNotNull(idpsDecryptorimpl.decrypt(encryptedBytes));
}
@Test(expected = StorageException.class)
public void testDecryptException() throws IdpsCommunicationException, IdpsException {
byte[] encryptedBytes = new byte[1];
encryptedBytes[0] = 20;
byte[] decryptedBytes = new byte[1];
decryptedBytes[0] = 97;
Mockito.when(idpsClient.newKeyHandleLatest(idpsKey)).thenReturn(key);
Mockito.when(key.deriveTwiceAndDecryptLocal(encryptedBytes)).thenThrow(new IdpsException());
String result = idpsDecryptorimpl.decrypt(encryptedBytes);
Assert.assertNull(result);
}
}
它依赖于JUnit版本。
已经提出的问题:何时使用@RunWith,何时使用@ExtendWith
和标记的解决方案:
答案可在文档中找到:
如果您使用的是JUnit 4,请不要忘记将@Runwith(SpringRunner.class)添加到您的测试中,否则注释将被忽略。如果您使用的是JUnit 5,则无需将等效的@Exantwith(SpringExtension.class)添加为@SpringBootTest和其他@...测试注释已经用它进行了注释
我正在尝试使用visual studio for mac在我的物理IOS设备(iPhone 7)上调试我的Xamarin Forms项目,它第一次运行良好,但一旦我更改代码并在模拟器上调试,我就无法再在我的物理设备上调试;我没有这个问题,当我改变我的代码和调试再次,只要我是在我的iPhone第一次调试。 一旦发生这种情况,我会得到以下错误: 错误1:无法协同设计“bin/iphone/debug/
我想用Selenium和TestNG来模拟谷歌搜索,同时使用各种搜索参数。下面是我的测试类和testng。xml。我已经使用下面的注释
我试图让我的硒测试在詹金斯运行,但面临以下问题。当使用maven test或intellij运行时,测试在我的本地计算机上运行得很好。 Firefox 39 x64 Selenium 2.46.0 SeleniumHQ插件(自动更新,所以应该是最新版本) 根据这个Xvfb服务器应该正在运行 问题出在哪里?我在网上搜索了两天,尝试了几乎所有我找到的东西后,我想不出来了。 资料来源: 错误:
我正在做一个SoapUI项目,我需要使用测试运行器运行我的测试套件。我正在为环境变量使用外部groovy脚本。我在这里面临的问题是,每当我从测试运行程序运行测试用例时,它的返回工作空间为空,这在Externalgroovy中使用。所以在外部groovy中,我将工作区设置为null,导致错误[getProjectByname()无法在null上调用]。下面是 使用工作空间的全局脚本的构造函数 上面我
我的maven项目有一些问题。我在我的maven文件夹src/test/java中创建了一些JUnit测试。 如果我在命令行或Eclipse IDE中使用“mvn清理安装”创建了我的maven项目,并使用“清理”和“安装”等运行配置,所有测试都将正常运行,不会发生一些错误。 但是,如果我手动运行 JUnit 测试,其中一个 Junit 测试将失败。但是什么原因,为什么maven没有意识到这个事实呢
我有一个类(A),它包含另一个类(B)的自动生成依赖项,而另一个类(B)又具有另一个类C的自动生成依赖项。 我正在尝试使用Mockito编写测试用例,并对依赖项使用spy注释。我在监视C类时遇到空指针错误。 如何从A类执行此单元测试?