带有嵌入式Postgressql数据库的Spring Boot测试

时间:2019-03-20 16:32:58

标签: java spring spring-boot testing mocking

我想在Spring-Boot 2.1.3中测试我的控制器。 我想模拟一个POST请求。 这很好用,但是我无法将数据保存到Postgres数据库中,因为H2无法执行JSONB。 因此,我使用this库来嵌入Postgres。

这工作得很安静,数据库启动了,但是我不知道如何带上我的模型来将数据保存在嵌入式数据库中。

您有什么想法吗?

我的测试:

@RunWith( SpringRunner.class )
@AutoConfigureMockMvc
@SpringBootTest
public class ControllerTest
{


@InjectMocks
private Student student;

@InjectMocks
private StudentInfo studentinfo;

@Autowired
private MockMvc mockMvc;


@ClassRule
public static PreparedDbRule preparedDbRule = EmbeddedPostgresRules.preparedDatabase( FlywayPreparer.forClasspathLocation( "db/migration" ) );

@Test
public void test() throws Exception
{

    try(EmbeddedPostgres postgres = EmbeddedPostgres.builder.setPort(62239).start();
    Connection connection = postgres.getPostgresDatabase().getConnection()){

    String jsonString = "{"Student" : "name", "course" : "course1"}";

        this.mockMvc.perform( post( "/students" )
                .contentType( MediaType.APPLICATION_JSON )
                .content( jsonString) )
                .andDo( print() )
                .andExpect( status().is( 201 )
                );
    }catch( Exception  e){
        e.printStackTrace();
    }
  }
}

我的application.properties:

spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:62239/postgres
spring.datasource.username=postgres
spring.datasource.password=postgres
flyway.enabled=false

这不是this的重复问题,因为他们在这个问题中使用libary解决了仅在Spring-Boot 1.4.0中可用/兼容的问题

  

同时支持Spring和Spring Boot框架   支持的版本是Spring 4.3.0+和Spring Boot 1.4.0 +

修改 经过一些测试后,我发现我应该为测试使用“ application.properties”文件。我还设置了数据库的端口。 但是现在我得到了一个随机端口,尽管我是用setPort()设置的。我每次启动都会得到一个随机端口。

0 个答案:

没有答案