Notieren Sie als Erinnerung, was Sie zum Testen von Spring Boot verwendet haben
@RunWith Es können verschiedene Runner-Klassen angegeben werden Die Runner-Klasse steuert, welche Art von Test durchgeführt wird.
@RunWith(SpringRunnner.class) Erforderlich beim Testen mit DI
@RunWith(SpringRunnner.class)
public class SampleClassTest {
@Autowired
private HogeService hogeService; // Dienst ist DI
}
@RunWith(MockitoJUnitRunner.class) Erforderlich, wenn es eine Klasse gibt, die Sie unter den getesteten Klassen verspotten möchten
@RunWith(MockitoJUnitRunner.class)
public class SampleClassTest {
@Mock
private HogeService hogeService; // Klassen, die wahrscheinlich nicht funktionieren
@Test
public void Normales System () {
Fuga fugaMock = mock(Fuga.class);
when(hogeService.get()).thenReturn(fugaMock);
/// Der Rückgabewert von get () von HogeService ist die Fuga-Klasse.
...
}
}
@RunWith(PowerMockRunner.class) Wird benötigt, wenn Sie statische Methoden verspotten müssen
@RunWith(PowerMockRunner.class)
@PrepareForTest ({HogeService.class}) // Klasse mit statischen Methoden
public class SampleClassTest {
@Before
public void setUp() {
PowerMockito.mockStatic(HogeService.class);
}
@Test
public void Normales System () {
HogeService hogeMock = mock(HogeService.class);
Fuga fugaMock = mock(Fuga.class);
when(hogeMock.get()).thenReturn(fugaMock);
/// Der Rückgabewert von get () von HogeService ist die Fuga-Klasse.
...
}
}
@DataJpaTest Es werden nur Tests zwischen der Entität und dem Repository unterstützt. Laden Sie mit @Entity und @Repository in die Klasse ApplicationContext.
@AutoConfigureTestDatabase Durch Festlegen von @AutoConfigureTestDatabase (replace = AutoConfigureTestDatabase.Replace.NONE) können Sie den in der Anwendung festgelegten DB verwenden.
@TestExecutionListeners Sie können Listener einrichten, die Tests überwachen und eine Vielzahl von Funktionen bereitstellen.
@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 Normales System () {
...
}
}
table-ordering.txt
sample_table
sample_table.csv
id,name,age
1,Tanaka,20
2,Suzuki,24
--TransactionalTestExecutionListener bietet Transaktionsverwaltungsfunktionen. --DbUnitTestExecutionListener bietet DB-bezogene Funktionen wie @DatabaseSetup.
Andere Listener, die wahrscheinlich angegeben werden
ServletTestExecutionListener: Bietet die Möglichkeit, eine Mock-Servlet-API zu konfigurieren, die das Testen des WebApplicationContext unterstützt.
DirtiesContextBeforeModesTestExecutionListener: Bietet die Lebenszyklusverwaltungsfunktion des im Test verwendeten DI-Containers. Wird aufgerufen, bevor eine Testklasse oder Testmethode ausgeführt wird.
DependencyInjectionTestExecutionLiLstener: Bietet DI-Funktionalität für die im Test verwendete Instanz.
SqlScriptsTestExecutionListener: Bietet die Möglichkeit, die in der Annotation @Sql angegebene SQL auszuführen.
@SpringBootTest Bietet Spring Boot-Funktionalität (liest application.properties und yml) Standardmäßig wird die App nicht gestartet, aber wenn Sie sie festlegen, wird sie gestartet.
@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 Normales System () {
Ressource 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();
... // bestätigen und überprüfen
}
}
--Rest API Testbeispiel
@AutoConfigureMockMvc Reproduzieren Sie den Betrieb von Spring MVC. Sie können die Kommunikation zwischen Controller↔︎Views testen.
@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 Normales System () {
MvcResult result = mockMvc.perform (get ("/ top")) // URL-Angabe
.andExpect (status (). isOk ()) // HTTP-Status überprüfen
.andExpect (view (). name ("top")) // HTML prüfen
.andReturn();
...
}
}
-Wenn Sie / top drücken und der Status 200 zurückgegeben wird und Sie top.html sehen können, fühlt es sich wie OK an
Recommended Posts