BAEL-6198: junit5 @Nested tests
This commit is contained in:
parent
ba8f9a6437
commit
fecb0722ee
|
@ -0,0 +1,19 @@
|
||||||
|
package com.baeldung.junit5.nested;
|
||||||
|
|
||||||
|
public class Article {
|
||||||
|
private String name;
|
||||||
|
private Membership articleLevel;
|
||||||
|
|
||||||
|
public Article(String name, Membership articleLevel) {
|
||||||
|
this.name = name;
|
||||||
|
this.articleLevel = articleLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Membership getArticleLevel() {
|
||||||
|
return articleLevel;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.baeldung.junit5.nested;
|
||||||
|
|
||||||
|
public enum Membership {
|
||||||
|
FREE(0), SILVER(10), GOLD(20);
|
||||||
|
|
||||||
|
private final int level;
|
||||||
|
|
||||||
|
Membership(int level) {
|
||||||
|
this.level = level;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int compare(Membership other) {
|
||||||
|
return level - other.level;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
package com.baeldung.junit5.nested;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class Publication {
|
||||||
|
private final List<Article> articles;
|
||||||
|
|
||||||
|
public Publication(List<Article> articles) {
|
||||||
|
this.articles = articles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getReadableArticles(User user) {
|
||||||
|
return articles.stream()
|
||||||
|
.filter(a -> a.getArticleLevel()
|
||||||
|
.compare(user.getMembership()) <= 0)
|
||||||
|
.map(Article::getName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getLockedArticles(User user) {
|
||||||
|
return articles.stream()
|
||||||
|
.filter(a -> a.getArticleLevel()
|
||||||
|
.compare(user.getMembership()) > 0)
|
||||||
|
.map(Article::getName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Article> getArticles() {
|
||||||
|
return articles;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.baeldung.junit5.nested;
|
||||||
|
|
||||||
|
public class User {
|
||||||
|
private String name;
|
||||||
|
private Membership membership;
|
||||||
|
|
||||||
|
public User(String name, Membership membership) {
|
||||||
|
this.name = name;
|
||||||
|
this.membership = membership;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Membership getMembership() {
|
||||||
|
return membership;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
package com.baeldung.junit5.nested;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Nested;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
public class NestedTest {
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void beforeEach() {
|
||||||
|
System.out.println("NestedTest.beforeEach()");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
class FirstNestedClass {
|
||||||
|
@BeforeEach
|
||||||
|
void beforeEach() {
|
||||||
|
System.out.println("FirstNestedClass.beforeEach()");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test() {
|
||||||
|
System.out.println("FirstNestedClass.test()");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
class SecondNestedClass {
|
||||||
|
@BeforeEach
|
||||||
|
void beforeEach() {
|
||||||
|
System.out.println("SecondNestedClass.beforeEach()");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test() {
|
||||||
|
System.out.println("SecondNestedClass.test()");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,93 @@
|
||||||
|
package com.baeldung.junit5.nested;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.DisplayName;
|
||||||
|
import org.junit.jupiter.api.Nested;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
@DisplayName("given a article publication with three articles")
|
||||||
|
class OnlinePublicationTest {
|
||||||
|
private Publication publication;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setupArticlesAndPublication() {
|
||||||
|
Article freeArticle = new Article("free article", Membership.FREE);
|
||||||
|
Article silverArticle = new Article("silver level article", Membership.SILVER);
|
||||||
|
Article goldArticle = new Article("gold level article", Membership.GOLD);
|
||||||
|
publication = new Publication(Arrays.asList(freeArticle, silverArticle, goldArticle));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("then 3 articles are available")
|
||||||
|
void shouldHaveThreeArticlesInTotal() {
|
||||||
|
List<Article> allArticles = publication.getArticles();
|
||||||
|
assertThat(allArticles).hasSize(3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
@DisplayName("when a user with a 'free' membership logs in")
|
||||||
|
class UserWithAFreeMembership {
|
||||||
|
User freeFreya = new User("Freya", Membership.FREE);
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("then he should be able to read the 'free' articles")
|
||||||
|
void shouldOnlyReadFreeArticles() {
|
||||||
|
List<String> articles = publication.getReadableArticles(freeFreya);
|
||||||
|
assertThat(articles).containsExactly("free article");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("then he shouldn't be able to read the 'silver' and 'gold' articles")
|
||||||
|
void shouldSeeSilverAndGoldLevelArticlesAsLocked() {
|
||||||
|
List<String> articles = publication.getLockedArticles(freeFreya);
|
||||||
|
assertThat(articles).containsExactlyInAnyOrder("silver level article", "gold level article");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
@DisplayName("when a user with a 'silver' membership logs in")
|
||||||
|
class UserWithSilverMembership {
|
||||||
|
User silverSilvester = new User("Silvester", Membership.SILVER);
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("then he should be able to read the 'free' and 'silver' level articles")
|
||||||
|
void shouldOnlyReadFreeAndSilverLevelArticles() {
|
||||||
|
List<String> articles = publication.getReadableArticles(silverSilvester);
|
||||||
|
assertThat(articles).containsExactlyInAnyOrder("free article", "silver level article");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("then he should see the 'gold' level articles as locked")
|
||||||
|
void shouldSeeGoldLevelArticlesAsLocked() {
|
||||||
|
List<String> articles = publication.getLockedArticles(silverSilvester);
|
||||||
|
assertThat(articles).containsExactlyInAnyOrder("gold level article");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
@DisplayName("when a user with a 'gold' membership logs in")
|
||||||
|
class UserWithGoldMembership {
|
||||||
|
User goldenGeorge = new User("George", Membership.GOLD);
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("then he should be able to read all the articles")
|
||||||
|
void shouldSeeAllArticles() {
|
||||||
|
List<String> articles = publication.getReadableArticles(goldenGeorge);
|
||||||
|
assertThat(articles).containsExactlyInAnyOrder("free article", "silver level article", "gold level article");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("then he should not see any article as locked")
|
||||||
|
void shouldNotHaveHiddenArticles() {
|
||||||
|
List<String> articles = publication.getLockedArticles(goldenGeorge);
|
||||||
|
assertThat(articles).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue