【问题标题】:How provide embedded DB to used by Mockito?如何提供嵌入式数据库供 Mockito 使用?
【发布时间】:2021-11-05 10:30:10
【问题描述】:

您好,我是新的 Mockito 框架,正在尝试为我的 spring-boot 应用程序编写一些单元测试。 我模拟了我的服务,所以每次 Mockito 运行时,它都使用一些空的模拟数据库,我想使用一些准备好的嵌入式数据库,让我解释一下用例。 我有一个实体,比如说 EntityX。

@Entity
@Table(name = "ENTITYX")
public class EntityX{
   private long id;
   // Some other properties
}

我创建了它的存储库,我有一个定义方法流程的服务,该方法接受 entityId 的参数并从 DB 中获取该实体,如下所示。


@Service
public class MyService{
   @Autowired
   EntityXRepository repository;

   public Object process(long entityId){
      EntityX entity  = repository.findById(entityId).orElseThrow(()-> new RuntimeException("No Entity found with id "+entityId));
      // Does some operation with entity object. 
     ...
     return someObject;
   }

}

现在在我的单元测试中,我正在使用 @Mock 和调用 process(someid); 来模拟我的服务;但处理方法总是抛出异常,因为在模拟数据库中不存在someid 的实体。插入 EntityX 表超出了我的应用程序的范围,所以是否可以向 Mockito 提供一些数据库文件(一些嵌入式数据库文件),以便它可以从提供的数据库记录而不是空数据库开始?

【问题讨论】:

    标签: spring-boot unit-testing mockito powermockito


    【解决方案1】:

    如果您真的想在单元测试中使用数据库,您可以创建一个application-test.properties 文件并针对这个确切的用例使用 h2 数据库。

    <!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.200</version>
        <scope>test</scope>
    </dependency>
    

    为了在你的单元测试中加载测试配置文件,你可以在你的测试类之上使用这个注解。

    @ActiveProfiles("test")
    

    为了有插入脚本,您可以在下面的链接中获得更多信息,这将解决在单元测试开始时加载数据库的问题。

    H2 in-memory database initialization with data


    如果您想避免数据库交互,也只是出于好奇,您可以模拟 EntityXRepository repository; 并使用 mockito 模拟所需的行为。

    @SpringBootTest
    @ActiveProfiles("test")
    class TestService{
    
    @MockBean
    EntityXRepository repository;
    
    @Test
    void test_somescenario_success(){
      Mockito.when(repository.findById("someId")).thenReturn(someEntityX);
      //other mocks, service call and assertions
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-08
      • 2012-05-04
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多