import com.controller.ValidatorClass;
import com.model.Entity;
import com.model.Status;
import com.repository.Repository;
@Service
public class Service {
@Autowired
private Repository repository;
@Autowired
private SequenceGeneratorService service;
public ResponseEntity storeInDb(ExecutorEntity model) {
ValidatorClass validation = new ValidatorClass();
Map<String, String> objValidate = validation.getInput(model.getLink(), model.getUsername(),
model.getPassword(), model.getSolution());
model.setId(service.getSequenceNumber(Entity.SEQUENCE_NAME));
model.setStatus(Status.READY);
repository.save(model);
return new ResponseEntity(model, HttpStatus.OK);
}
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentNotValidException.class)
public List<String> handleValidationExceptions(MethodArgumentNotValidException ex) {
return ex.getBindingResult()
.getAllErrors().stream()
.map(ObjectError::getDefaultMessage)
.collect(Collectors.toList());
}
}
@RestController
@RequestMapping(value = "/create")
public class Controller {
@Autowired
private Service service;
@RequestMapping(value = "/create", method = RequestMethod.POST)
public ResponseEntity code(@Valid @RequestBody Entity model) {
return service.storeInDb(model);
}
@Transient
public static final String SEQUENCE_NAME = "user_sequence";
@NotNull(message = "Name can not be Null")
private String username;
@NotNull(message = "Password can not be Null")
private String password;
@NotNull(message = "Jenkins Link can not be Null")
private String Link;
@NotNull(message = "Solution can not be Null")
private String solution;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private Status status; //enum class having READY and FAIL as values.
JUnit是一个广泛的主题,您应该了解它:https://JUnit.org/junit5/
请注意,JUnit5是当前版本(我看到您已经用JUnit4
标记了您的问题)。
我将给您一个如何编写集成测试的想法,以帮助您开始编写集成测试。在通往智慧的旅程中,您可能会遇到TestrestTemplate
,但现在建议使用WebTestClient
。
package no.yourcompany.yourapp.somepackage;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.ResponseEntity;
import org.springframework.test.web.reactive.server.WebTestClient;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureWebTestClient
public class ExecutorControllerTest {
@Autowired
WebTestClient webTestClient;
@Test
public void postExecutor_validModel_receiveOk() {
webTestClient
.post().uri("/executor")
.bodyValue(createValidExecutorEntity())
.exchange()
.expectStatus().isOk();
}
@Test
public void postExecutor_validModel_receiveResponseEntity() {
webTestClient
.post().uri("/executor")
.bodyValue(createValidExecutorEntity())
.exchange()
.expectBody(ResponseEntity.class)
.value(responseEntity -> assertThat(responseEntity).isNotNull());
}
private static ExecutorEntity createValidExecutorEntity() {
....
}
}
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<scope>test</scope>
</dependency>
我想要一个在Spring数据的帮助下创建的存储库(例如)。我不熟悉spring-data(但不熟悉spring),我使用本教程。我选择的处理数据库的技术是JPA2.1和Hibernate。问题是我不知道如何为这样的存储库编写单元测试。 让我们以方法为例。由于我正在进行测试--首先,我应该为它编写一个单元测试--这就是我遇到三个问题的地方: > 首先,如何将的模拟注入到不存在的接口实现中?Sprin
我是新的弹簧靴,做了我的第一个实体。如何测试存储库?我使用的是本地MySQL数据库。那么第一步就是嘲弄数据库? 而我的存储库只是扩展了Jparepository。 我得到的错误是java.lang.IllegalStateException:未能加载ApplicationContext。还有一点:无法用嵌入式数据库替换DataSource进行测试。如果您想要一个嵌入式数据库,请在类路径上放置一个受
我有一个问题与存根我的存储库。有人建议我只创建另一个application.properties(我没有这样做),并使用像H2这样的内存数据库。不过,我想知道我是否可以只是存根调用,这样当调用MyDataService.FindById(id)而不是试图从数据库中获取它时,就可以返回一个模拟对象?
我在玩spring数据存储库,有一个关于编写CRUD测试的问题。我针对Hibernate DAO和EJB3实体bean编写了许多CRUD测试,在这些测试中,我创建和实体,将其刷新到数据库中,清除实体管理器,并按ID读回它。实体管理器被清除,因此第一级缓存不会在读取时被击中。 使用spring数据存储库,我找不到一种方法来清除测试使用的底层实体管理器,这样我的读取就不会返回到实际的数据库,使我的测试
} 然后我有我的服务课,看起来像这样 然后是我的存储库:
我正在使用Spring Boot进行多模块项目。我想编写一些单元测试来检查我的存储库,服务等。存储库代码是在公共项目上编写的,而公共项目在其他项目上使用。此项目不包含任何初学者应用。它只是由实体、存储库和服务组成。 我看到这个主题(如何使用Spring Boot测试Maven模块项目)关于类似的问题,但我没有设法成功地实现它来测试我的存储库。 当我启动测试时,EntityARepository会引