我想在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()设置的。我每次启动都会得到一个随机端口。