Enregistrez ce que vous avez utilisé pour tester Spring Boot comme rappel
@RunWith Différentes classes de coureurs peuvent être spécifiées La classe Runner contrôle le type de test effectué.
@RunWith(SpringRunnner.class) Requis lors des tests avec DI
@RunWith(SpringRunnner.class)
public class SampleClassTest {
@Autowired
private HogeService hogeService; // Service étant DI
}
--Lorsque vous souhaitez simuler une classe à réaliser automatiquement, réécrivez-la dans @MockBean sans utiliser @Autowired.
@RunWith(MockitoJUnitRunner.class) Obligatoire si vous souhaitez vous moquer d'une classe parmi les classes testées
@RunWith(MockitoJUnitRunner.class)
public class SampleClassTest {
@Mock
private HogeService hogeService; // Classes qui ne fonctionneront probablement pas
@Test
public void Système normal () {
Fuga fugaMock = mock(Fuga.class);
when(hogeService.get()).thenReturn(fugaMock);
/// La valeur de retour de get () de HogeService sera la classe Fuga.
...
}
}
@RunWith(PowerMockRunner.class) Nécessaire lorsque vous devez vous moquer des méthodes statiques
@RunWith(PowerMockRunner.class)
@PrepareForTest ({HogeService.class}) // Classe contenant des méthodes statiques
public class SampleClassTest {
@Before
public void setUp() {
PowerMockito.mockStatic(HogeService.class);
}
@Test
public void Système normal () {
HogeService hogeMock = mock(HogeService.class);
Fuga fugaMock = mock(Fuga.class);
when(hogeMock.get()).thenReturn(fugaMock);
/// La valeur de retour de get () de HogeService sera la classe Fuga.
...
}
}
@DataJpaTest Il prend en charge les tests uniquement entre l'entité et le référentiel. Chargez dans la classe ApplicationContext avec @Entity et @Repository.
@AutoConfigureTestDatabase En définissant @AutoConfigureTestDatabase (replace = AutoConfigureTestDatabase.Replace.NONE), vous pouvez utiliser le jeu de bases de données dans l'application.
@TestExecutionListeners Vous pouvez configurer des écouteurs qui surveillent les tests et fournissent une variété de fonctionnalités.
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@TestExecutionListeners({
TransactionalTestExecutionListener.class,
DbUnitTestExecutionListener.class})
@DbUnitConfiguration(
dataSetLoader = ReplacementCsvDataSetLoader.class
)
public class RepositoryTest {
@DatabaseSetup("/sample/")
@Test
public void Système normal () {
...
}
}
table-ordering.txt
sample_table
sample_table.csv
id,name,age
1,Tanaka,20
2,Suzuki,24
--TransactionalTestExecutionListener fournit une fonctionnalité de gestion des transactions. --DbUnitTestExecutionListener fournit des fonctions liées à la base de données telles que @DatabaseSetup.
Autres auditeurs susceptibles d'être spécifiés
ServletTestExecutionListener: Fournit la possibilité de configurer une API de servlet fictive qui prend en charge le test de WebApplicationContext.
DirtiesContextBeforeModesTestExecutionListener: Assure la fonction de gestion du cycle de vie du conteneur DI utilisé dans le test. Appelé avant d'exécuter une classe de test ou une méthode de test.
DependencyInjectionTestExecutionLiLstener: Fournit la fonctionnalité DI pour l'instance utilisée dans le test.
SqlScriptsTestExecutionListener: Fournit la possibilité d'exécuter le SQL spécifié par l'annotation @Sql.
@SpringBootTest Fournit la fonctionnalité Spring Boot (lit application.properties et yml) Par défaut, l'application ne démarre pas, mais si vous la définissez, elle démarre.
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@TestExecutionListeners(
listeners = {
TransactionalTestExecutionListener.class,
DbUnitTestExecutionListener.class},
mergeMode = TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS
)
@DbUnitConfiguration(
dataSetLoader = ReplacementCsvDataSetLoader.class
)
public class FunctionalTest {
@DatabaseSetup("/sample/")
@Test
public void Système normal () {
Resource sampleJson = resourceLoader.getResource ("/ response / normal system.json");
String jsonText = FileUtils.readFileToString(responseResource.getFile(),UTF_8);
ResponseEntity actual = testRestTemplate.exchange(
"/top",
HttpMethod.GET,
new HttpEntity<>(null,null),String.class
);
String actualText = actual.getBody().toString();
... // affirmer et vérifier
}
}
@AutoConfigureMockMvc Reproduisez le fonctionnement de Spring MVC. Vous pourrez tester la communication entre Controller↔︎Views.
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@TestExecutionListeners(
listeners = {
TransactionalTestExecutionListener.class,
DbUnitTestExecutionListener.class},
mergeMode = TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS
)
@DbUnitConfiguration(
dataSetLoader = ReplacementCsvDataSetLoader.class
)
@AutoConfigureMockMvc
public class FunctionalTest {
@DatabaseSetup("/sample/")
@Test
public void Système normal () {
MvcResult result = mockMvc.perform (get ("/ top")) // Spécification d'URL
.andExpect (status (). isOk ()) // Vérifier l'état HTTP
.andExpect (view (). name ("top")) // Vérifier HTML
.andReturn();
...
}
}
-Si vous appuyez sur / top et que le statut 200 est retourné et que vous pouvez voir top.html, cela semble OK
Recommended Posts