当前位置: 首页 > 知识库问答 >
问题:

如何存根Spring存储库以在集成测试中抛出异常?

相德宇
2023-03-14

我有一个服务,它有一个存储库作为构造函数的参数。

@Autowired
NodeServiceListInstallService( final BykiListRepository aBykiListRepository )

ByKilistRepository是默认的Spring存储库,没有实现

interface BykiListRepository extends JpaRepository<BykiList, Long> {
    //some magic methods
}
@SpringBootApplication
@EnableConfigurationProperties( ApplicationProperties )
@EnableJpaRepositories
@EnableTransactionManagement
@ImportResource( 'classpath:META-INF/spring/application-context.xml' )
class Application extends SpringBootServletInitializer {
    @Bean
    NodeServiceListInstallService nodeServiceListInstallService( final BykiListRepository bykiListRepository ) {
        new NodeServiceListInstallService( bykiListRepository )
    }
}
@TestConfiguration
class TestConfig {
    @Bean
    BykiListRepository bykiListRepository() {
        //return Spock's Spy/Stub or new BykiRepositoryBadImpl()
    }
@ContextConfiguration( classes = TestConfig )
class GlobalErrorHandlerIntegrationTest extends BaseFlowIntegrationTest {
    //test()
}

我在Groovy-2.4.12上编写,并使用Spock-1.1编写测试。Spring Boot 1.5.4。保留的变体是使用方面,但没有完全像我希望的那样。会非常感激你的帮助。

更新:DetachedMockFactory的用法:

配置:

class DummyConfiguration {
    private final detachedFactory = new DetachedMockFactory()
    @Bean
    @Primary
    BykiListRepository bykiListRepository() {
        detachedFactory.Mock( BykiListRepository )
    }
}
@SpringBootTest( classes = DummyConfiguration )
@Import( [DummyConfiguration] )
@ContextConfiguration( classes = DummyConfiguration )
class GlobalErrorHandlerIntegrationTest extends BaseFlowIntegrationTest {
    @Autowired
    BykiListRepository bykiListRepositoryMock
    def 'exercise error handling'() {
        given: 'the failing repository'
        bykiListRepositoryMock.save( _ ) >> {
            throw new CannotCreateTransactionException()
        }
        when: 'the message is send to rabbit'
        rabbitOperations.send( configuration.rabbitExchangeName, '', msg )
    }
}
@SpringBootTest( webEnvironment = SpringBootTest.WebEnvironment.NONE )
@ContextConfiguration( classes = Application )
class BaseFlowIntegrationTest extends AbstractIntegrationTest {...}
@Category( InboundIntegrationTest )
abstract class AbstractIntegrationTest extends Specification {...}

共有1个答案

欧阳飞
2023-03-14

您可以创建test configuration,如下所示,并在调用某个函数时使用Spock记录,然后将抛出ex。当然,在测试类中使用@inject或@autowire...并执行@import([IntegrationTestMockingConfig])

@TestConfiguration
class IntegrationTestMockingConfig {

     private DetachedMockFactory factory = new DetachedMockFactory()

     @Bean
     ExternalRepository externalRepository() {
         factory.Mock(ExternalRepository)
     }
}
 类似资料:
  • 我是新的弹簧靴,做了我的第一个实体。如何测试存储库?我使用的是本地MySQL数据库。那么第一步就是嘲弄数据库? 而我的存储库只是扩展了Jparepository。 我得到的错误是java.lang.IllegalStateException:未能加载ApplicationContext。还有一点:无法用嵌入式数据库替换DataSource进行测试。如果您想要一个嵌入式数据库,请在类路径上放置一个受

  • 我想要一个在Spring数据的帮助下创建的存储库(例如)。我不熟悉spring-data(但不熟悉spring),我使用本教程。我选择的处理数据库的技术是JPA2.1和Hibernate。问题是我不知道如何为这样的存储库编写单元测试。 让我们以方法为例。由于我正在进行测试--首先,我应该为它编写一个单元测试--这就是我遇到三个问题的地方: > 首先,如何将的模拟注入到不存在的接口实现中?Sprin

  • 我在Spring Boot应用程序中有@Service,它正在解析文件,然后使用Spring数据JPA将其存储到DB中。我想用改变这个映射的所有逻辑来测试这个解析。为此,我需要在测试中将映射存储在DB中。 问题是在使用注解@SpringBootTest进行测试期间,我不想加载整个上下文,而只想加载我的ParsingService。当我写作时: 无法初始化此测试,因为我没有在@SpringBootT

  • 我对spring boot和JPA相当陌生。我正在做我的学习目的的小项目。 实体类 有线索吗?

  • 我正在尝试为一个简单的web应用程序创建一个存储库。似乎导入和使用导入组织。springframework。数据存储库。积垢会导致错误。我不确定如何开始调试收到的错误消息。 这是我的实体 这是我的存储库 这是我的控制器 还有我的pom.xml