java—如何测试SpringMVC和存储库mongodb

qojgxg4l  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(347)

有人能帮我测试一下junit服务、控制器和存储库吗。在为服务和控制器类编写测试用例时,我遇到了很多错误。
这是我的服务班

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.

还有那些能手和二传手。

lmvvr0a8

lmvvr0a81#

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() {
        ....
    }
}

依赖于 spring-boot-starter-test ,则无需向junit添加显式依赖项。

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

为了使用 WebTestClient ,将以下内容添加到pom中:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
        <scope>test</scope>
    </dependency>

相关问题