Faut-@Autowired et @SpringBootTest être utilisés dans des tests unitaires?

jambon:

Dans un projet où je travaille, nous avons des services de dépistage Initialisation unité de la manière suivante:

  1. dépendances simulacres qui sont nécessaires pour le service.
  2. Créez le service en utilisant un constructeur.

Quelque chose comme ça :

@RunWith(SpringRunner.class)
public class ServiceTest extends AbstractUnitTest {

  @Mock private Repository repository;
  private Service service;

  @Before
  public void init() {
    service = new Service(repository);
    when(repository.findById(any(Long.class))).thenReturn(Optional.of(new Entity()));
  }
}

Mais notre nouveau développeur proposé d'utiliser @Autowiredet@SpringBootTest

@SpringBootTest(classes = ServiceTest.class)
@MockBean(classes = Repository.class)
@RunWith(SpringRunner.class)
public class ServiceTest extends AbstractUnitTest {

  @MockBean private Repository repository;
  @Autowired private Service service;

  @Before
  public void init() {
    when(repository.findById(any(Long.class))).thenReturn(Optional.of(new Entity()));
  }
}

Avant cela, je suppose que @Autowiredet @SpringBootTestdoit être utilisé que dans les tests d'intégration. Mais googlé beaucoup et je vois que certaines personnes utilisent ces deux dans les tests unitaires. Je lis boot-fonctionnalités test . , Je lis aussi ce tests unitaires contre les tests d'intégration avec Spring . Pour moi, il se sent toujours bien doesn`t que nous devons impliquer printemps pour faire l' injection de dépendance pour les tests unitaires, comme nous pouvons le faire par nous - mêmes pour faire les tests unitaires. Alors, doit @Autowiredet @SpringBootTestêtre utilisé dans les tests unitaires?

chrylis -on strike-:

N ° A l' unité test est de tester un seul composant dans l' isolement. En utilisant l' injection de constructeur dans vos haricots vous permet d'appeler très simplement new SomeService(myMock), sans ressort nécessaire.

L' écriture des composants ou fonctionnels des tests (test de votre application , mais pas câbler à des services externes pour un test complet d'intégration, se moquant des interfaces uniquement externes, ce qui est bon pour des choses comme des tests MockMvc) est un bon match pour @SpringBootTest, et dans ce cas , vous pourriez avoir besoin pour créer des objets fantaisie dans une configuration Spring et les lier automatiquement dans votre test afin que vous puissiez les manipuler.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=313453&siteId=1
conseillé
Classement