ich lese über Unit-Tests strukturieren mit einer Testklasse pro Klasse und einer inneren Klasse pro Methode. Ich dachte mir, dass dies ein praktischer Weg wäre, um die Tests zu organisieren, also habe ich es in unserem Java-Projekt ausprobiert. Allerdings scheinen die Tests in den inneren Klassen überhaupt nicht abgeholt zu werden.
Ich habe es ungefähr so gemacht:
public class DogTests
{
public class BarkTests
{
@Test
public void quietBark_IsAtLeastAudible() { }
@Test
public void loudBark_ScaresAveragePerson() { }
}
public class EatTests
{
@Test
public void normalFood_IsEaten() { }
@Test
public void badFood_ThrowsFit() { }
}
}
Unterstützt JUnit dies nicht oder mache ich es einfach falsch?
Ich denke, wenn Sie die inneren Klassen deklarieren statices sollte funktionieren.
– Stefan
6. Januar 2012 um 13:16 Uhr
Siehe hier: stackoverflow.com/questions/4150490/…
– ähm
6. Januar 2012 um 13:20 Uhr
Sie sollten Ihre Klasse mit kommentieren @RunWith(Enclosed.class)und wie andere sagten, deklarieren Sie die inneren Klassen als statisch:
@RunWith(Enclosed.class)
public class DogTests
{
public static class BarkTests
{
@Test
public void quietBark_IsAtLeastAudible() { }
@Test
public void loudBark_ScaresAveragePerson() { }
}
public static class EatTests
{
@Test
public void normalFood_IsEaten() { }
@Test
public void badFood_ThrowsFit() { }
}
}
Sie können immer noch nur 1 Kurs gleichzeitig durchführen.
– Sridhar Sarnobat
24. Januar 2017 um 23:41 Uhr
Funktioniert bei mir. Zumindest in Intellij kann ich entweder alle Tests, nur Tests einer untergeordneten Klasse oder einen einzelnen Test ausführen. Mit Codefaltung ist das wirklich schön!
– Willey
3. Februar 2017 um 14:06 Uhr
Führt alle Tests für mich mit Eclipse Neon und JUnit 4.12 aus. Eclipse fordert auch auf, das äußere Fixture oder eines der verschachtelten Fixtures auszuführen. Das einzige Problem, das ich habe, ist, dass Tests von den verschachtelten Fixtures zweimal ausgeführt werden, wenn sie von Gradle ausgeführt werden. GRADLE-2843 wurde für diese Ausgabe im Jahr 2013 eröffnet, wurde aber inzwischen aufgegeben.
– Rusty Shackleford
31. Mai 2017 um 1:45 Uhr
Beachten Sie auch, dass die innere Klasse öffentlich sein muss.
– tkruse
28. Februar 2019 um 8:22 Uhr
Dies scheint veraltet zu sein – siehe stackoverflow.com/a/22546453/5209935
– Matthew
24. April 2020 um 8:26 Uhr
public class ServicesTest extends TestBase {
public static class TestLogon{
@Test
public void testLogonRequest() throws Exception {
//My Test Code
}
}
}
Die innere Klasse statisch zu machen, funktioniert für mich.
Sie können immer noch nur 1 Kurs gleichzeitig durchführen.
– Sridhar Sarnobat
24. Januar 2017 um 23:41 Uhr
@Sridhar-Sarnobat Wovon redest du? Es funktioniert mindestens in JUnit 4.12. Kann mir aber nicht die Mühe machen, ältere Versionen zu testen.
– Adowrath
31. Januar 2017 um 7:44 Uhr
Wenn Sie Gradle verwenden, tun Sie auch a ./gradlew clean schien für mich zu funktionieren (glaube ich)
– Dylanthepiguy
18. April 2019 um 5:31 Uhr
In JUnit 5 markieren Sie einfach nicht statische innere Klassen als @Nested:
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
public class DogTests {
@Nested
public class BarkTests {
@Test
public void quietBark_IsAtLeastAudible() { }
@Test
public void loudBark_ScaresAveragePerson() { }
}
@Nested
public class EatTests {
@Test
public void normalFood_IsEaten() { }
@Test
public void badFood_ThrowsFit() { }
}
}
Dies ist die aktuellste Antwort ab 2022. Es ist auch der beste Weg, um die ärgerliche Tatsache zu umgehen, dass @TestPropertySource von Spring nur auf Klassen angewendet werden kann.
– Miguel Ruiz
8. Juni um 21:22 Uhr
Kai g
Ich denke, einige der Antworten könnten für ältere Versionen von JUnit gelten. In JUnit 4 hat das bei mir funktioniert:
@RunWith(Suite.class)
@Suite.SuiteClasses({ DogTests.BarkTests.class, DogTests.EatTests.class })
public class DogTests
{
public static class BarkTests
{
@Test
public void quietBark_IsAtLeastAudible() { }
@Test
public void loudBark_ScaresAveragePerson() { }
}
public static class EatTests
{
@Test
public void normalFood_IsEaten() { }
@Test
public void badFood_ThrowsFit() { }
}
}
import com.nitorcreations.junit.runners.NestedRunner
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
@RunWith(NestedRunner.class)
public class RepositoryUserServiceTest {
public class RegisterNewUserAccount {
public class WhenUserUsesSocialSignIn {
public class WhenUserAccountIsFoundWithEmailAddress {
@Test
public void shouldThrowException() {
assertTrue(true);
}
}
}
}
}
PS: Der Beispielcode wurde aus dem obigen Blogbeitrag übernommen und modifiziert
Ich suchte nach einer Möglichkeit, ein spezifikationsähnliches Ding in JUnit erscheinen zu lassen … PERFEKT! Vielen Dank!
– Toni K.
30. März 2016 um 18:23 Uhr
Genau das, wonach ich gesucht habe!
– Jeff Slavin
30. März 2016 um 18:27 Uhr
Dies funktioniert auch mit Kotlin (use @RunWith(NestedRunner::class In diesem Fall).
– x1a4
3. September 2018 um 16:26 Uhr
Ich suchte nach einer Möglichkeit, ein spezifikationsähnliches Ding in JUnit erscheinen zu lassen … PERFEKT! Vielen Dank!
– Toni K.
30. März 2016 um 18:23 Uhr
Genau das, wonach ich gesucht habe!
– Jeff Slavin
30. März 2016 um 18:27 Uhr
Dies funktioniert auch mit Kotlin (use @RunWith(NestedRunner::class In diesem Fall).
– x1a4
3. September 2018 um 16:26 Uhr
12245500cookie-checkTestfälle in inneren Klassen mit JUnityes
Ich denke, wenn Sie die inneren Klassen deklarieren
static
es sollte funktionieren.– Stefan
6. Januar 2012 um 13:16 Uhr
Siehe hier: stackoverflow.com/questions/4150490/…
– ähm
6. Januar 2012 um 13:20 Uhr