Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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_Spring Boot_Unit Testing_Mockito_Keystore - Fatal编程技术网

Java 如何在没有数据库的情况下测试自定义存储库层?测试正在通过,但方法没有得到覆盖

Java 如何在没有数据库的情况下测试自定义存储库层?测试正在通过,但方法没有得到覆盖,java,spring-boot,unit-testing,mockito,keystore,Java,Spring Boot,Unit Testing,Mockito,Keystore,我正在开发一个存储库,该存储库实现Java加密体系结构并管理密钥库文件中的密钥。我试图避免在测试时使用外部依赖项,因此使用模拟测试。然而,在检查测试覆盖率时,这些似乎没有显示出来。只有直接链接到源代码而不使用mock的测试似乎才被涵盖 我想在我的测试中模仿,并且仍然实现测试覆盖率。我试过使用Mockito、Powermock、Powermockito 我还尝试对存储库使用varius模拟方法,如: private final EncryptionRepositoryImpl encryption

我正在开发一个存储库,该存储库实现Java加密体系结构并管理密钥库文件中的密钥。我试图避免在测试时使用外部依赖项,因此使用模拟测试。然而,在检查测试覆盖率时,这些似乎没有显示出来。只有直接链接到源代码而不使用mock的测试似乎才被涵盖

我想在我的测试中模仿,并且仍然实现测试覆盖率。我试过使用Mockito、Powermock、Powermockito

我还尝试对存储库使用varius模拟方法,如:
private final EncryptionRepositoryImpl encryptionRepositoryMock=mock(EncryptionRepositoryImpl.class)

@SpringBootTest
管理密钥时的公共类{
@蚕豆
私钥管理存储库impl keyManagementRepository;
@自动连线
应用上下文上下文;
@试验
获取\u密钥\u别名()时公共无效引发异常{
List KeyAlias=new ArrayList();
添加(randomUUID().toString());
添加(randomUUID().toString());
添加(randomUUID().toString());
Mockito.when(keyManagementRepository.getkeyalases())。然后返回(keyalases);
KeyManagementRepositoryImpl repoFromContext=context.getBean(KeyManagementRepositoryImpl.class);
List keyAliasesRes=repoFromContext.getKeyAliases();
assertEquals(键别名、键别名);
验证(keyManagementRepository).getKeyAlias();
}
}

您的测试有一些错误。让我们在下面一步一步地做:

  • 您正在为类型
    KeyManagementRepositoryImpl
  • @MockBean
    私钥管理存储库impl keyManagementRepository;
    
  • 然后,只要调用
    keyManagementRepository
    实例中的
    getkeyalises()
    方法,就模拟返回
    Mockito.when(keyManagementRepository.getkeyalases())。然后返回(keyalases);
    
  • 然后为类型
    KeyManagementRepositoryImpl
    创建一个新实例(
    repoFromContext
    ),并从此实例调用方法
    GetKeyAlias
  • KeyManagementRepositoryImpl repoFromContext=context.getBean(KeyManagementRepositoryImpl.class);
    List keyAliasesRes=repoFromContext.getKeyAliases();
    
    上面这行从您创建的实例(
    repoFromContext
    )调用该方法,而不是从模拟实例(
    keyManagementRepository
    ,您看到了吗


    我建议您
    @Autowire
    调用您的
    KeyManagementRepositoryImpl
    的服务或任何组件,将模拟存储库注入此组件,然后在此组件中调用调用
    getkeyalases
    的方法。它将使用您在
    Mockito中配置的返回。当
    调用时。

    您好,我已尝试实现您描述的更改。测试确实通过了,但仍然没有得到覆盖。以下是我的更改:``@InjectMocks KeyManagementServiceImpl keyManagementService@Mock KeyManagementRepositoryImpl keyManagementRepository@Test public void Test(){//生成keyalases数组时(keyManagementRepository.getkeyalases())。然后返回(keyalases);列出keyalasesres=keyManagementService.getkeyalases();assertEquals(keyalases,keyalasesres);}``感谢您的帮助,希望您有机会看看这个@Vitor Cavalcantii而不是使用
    @InjectMocks
    构造
    KeyManagementService
    ,尝试在服务的构造函数中构造通过模拟存储库的实例。类似于:
    KeyManagementService KeyManagementService=newkeymanagementserviceinpl(keyManagementRepository)。我们尝试实现了这一点,但测试仍然没有得到覆盖@Test public void Test(){List keyalases=new ArrayList();keyalass.add(randomUUID().toString());keyalass.add(randomUUID().toString());keyalass.add(randomUUID().toString());Mockito.when(keyManagementRepository.getkeyalases())。然后返回(keyalases);List keyalasesres=keyManagementService.getkeyalases();assertEquals(keyalases,keyalasesres);}以下是变量:
    @MockBean KeyManagementRepositoryImpl keyManagementRepository@自动连线的公钥管理服务impl keyManagementService=新的keymanagementserviceinpl(keyManagementRepository)
    
    @SpringBootTest
    public class When_managing_keys {
    
        @MockBean
        private KeyManagementRepositoryImpl keyManagementRepository;
    
        @Autowired
        ApplicationContext context;
    
        @Test
        public void when_getting_key_aliases() throws Exception {
            List<String> keyAliases = new ArrayList<>();
            keyAliases.add(randomUUID().toString());
            keyAliases.add(randomUUID().toString());
            keyAliases.add(randomUUID().toString());
    
            Mockito.when(keyManagementRepository.getKeyAliases()).thenReturn(keyAliases);
    
            KeyManagementRepositoryImpl repoFromContext = context.getBean(KeyManagementRepositoryImpl.class);
            List<String> keyAliasesRes = repoFromContext.getKeyAliases();
    
            assertEquals(keyAliases, keyAliasesRes);
            Mockito.verify(keyManagementRepository).getKeyAliases();
        }
    }