Use Parameterized Tests. RSPEC-5976
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 30/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Da chiarire
- Stato di attività
- Ferma
- Stack tecnologico
- java
- Ambito
- testing-qa
Direzione di ricerca
Non è indicato alcun file di implementazione né alcun percorso di test. Inizia esaminando le ricette di test Java esistenti nel repository e i relativi test, quindi confronta il comportamento previsto con la regola RSPEC-5976 collegata. Il lavoro è completato quando il framework è in grado di gestire i casi di test parametrizzati della regola e dispone della copertura per gli esempi descritti.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Is this something that could be achieved with this framework?
When multiple tests differ only by a few hardcoded values they should be refactored as a single "parameterized" test. This reduces the chances of adding a bug and makes them more readable. Parameterized tests exist in most test frameworks (JUnit, TestNG, etc...).
The right balance needs of course to be found. There is no point in factorizing test methods when the parameterized version is a lot more complex than initial tests.
This rule raises an issue when at least 3 tests could be refactored as one parameterized test with less than 4 parameters. Only test methods which have at least one duplicated statement are considered.
Noncompliant Code Example
with JUnit 5import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
public class AppTest
{
@Test
void test_not_null1() { // Noncompliant. The 3 following tests differ only by one hardcoded number.
setupTax();
assertNotNull(getTax(1));
}@Test void test_not_null2() { setupTax(); assertNotNull(getTax(2)); } @Test void test_not_nul3l() { setupTax(); assertNotNull(getTax(3)); } @Test void testLevel1() { // Noncompliant. The 3 following tests differ only by a few hardcoded numbers. setLevel(1); runGame(); assertEquals(playerHealth(), 100); } @Test void testLevel2() { // Similar test setLevel(2); runGame(); assertEquals(playerHealth(), 200); } @Test void testLevel3() { // Similar test setLevel(3); runGame(); assertEquals(playerHealth(), 300); }}
Compliant Solution
import static org.junit.jupiter.api.Assertions.assertEquals;import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;public class AppTest
{@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
void test_not_null(int arg) {
setupTax();
assertNotNull(getTax(arg));
}@ParameterizedTest @CsvSource({ "1, 100", "2, 200", "3, 300", }) void testLevels(int level, int health) { setLevel(level); runGame(); assertEquals(playerHealth(), health); }}
Read more : https://rules.sonarsource.com/java/RSPEC-5976?search=tests
- Lingua principale
- Java
- Stelle
- 100
- Fork
- 105
- Merge medio
- 2g 15h
- PR unite (30g)
- 13
Preparare l'ambiente
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di openrewrite/rewrite-testing-frameworks
-
bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 74/100
openrewrite/rewrite-testing-frameworks#1127 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 68/100
openrewrite/rewrite-testing-frameworks#1126 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 70/100
openrewrite/rewrite-testing-frameworks#1125 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 65/100
openrewrite/rewrite-testing-frameworks#1124 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 78/100
openrewrite/rewrite-testing-frameworks#1123 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di openrewrite/rewrite-testing-frameworks
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
beehive-lab/TornadoVM#1151 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
(cbor) `maxStringLength` not consistently checked for chunked (indefinite-length) text valuesAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
FasterXML/jackson-dataformats-binary#823 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno