Симулировать клиентский юнит тест - PullRequest
0 голосов
/ 02 мая 2019

Я хотел бы знать, как лучше написать модульные тесты в этом контексте:

MyApi:

@RestController
public class MyApi{

    @Autowired
    MyAction myAction;

    @PostMapping
    public ResponseEntity addAction(@ResponseBody MyDto myDto){
        return myAction.addAction(myDto);
    }
}

MyAction:

@Service
public class MyAction{

    @Autowired
    private MyClient myClient;

    public ResponseEntity<AuthenticationResponseDto> login(MyDto myDto{
        return ResponseEntity.ok(myClient.addClient(myDto));
    } 

}

ДляНапример, обязательно ли добавлять конструктор?

Спасибо

Ответы [ 2 ]

1 голос
/ 03 мая 2019

Рекомендуется использовать инжекцию конструктора, однако, если вы не хотите использовать его, вам нужно использовать @Mock и @InjectMocks. Он использует отражение, и конструктор не требуется определять.

@RunWith(MockitoJUnitRunner.class)
public class Test {

    @Mock
    private Client client;

    @InjectMocks
    private ServiceImpl plannerService = new ServiceImpl();

    @Test
    public void test() throws Exception {
        ....
    }
}
0 голосов
/ 03 мая 2019

Я уверен, что есть способ избежать использования конструктора с автопроводкой и просто автопроводки поля, однако я использую конструкторы, так как считаю это хорошей практикой.Это также позволяет легко вводить макетированный объект, например

@Mock
MyAction myAction;

MyApi myApi;
ResponseEntity<AuthenticationResponseDto> testResponse = ResponseEntity.ok
                                                           (new AuthenticationResponseDto());


@Before
public void setup(){
   myApi = new MyApi(myAction);
}

@Test
public void simpleMyApiTestExample (){
  when(myAction.login(any())).thenAnswer(i-> testRespone);
  ResponseEntity<?> actualResponse = myApi.addAction(new MyDto());
  assertThat(actualResponse).isSameAs(testResponse);
}

Просто чтобы дать вам представление.Я только что написал этот пример в текстовом редакторе SO, так что прошу прощения за любые опечатки / ошибки.Но, надеюсь, это показывает, почему наличие конструкторов полезно для тестирования автопроводок.Это позволяет вам макетировать объекты, необходимые для создания экземпляров, добавляя их в конструктор.В этом примере это, вероятно, также применимо к объектам MyDto и AuthenticationResponseDto.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...