Из того что я понимаю на данный момент, вначале пишем тесты которые задают грубо говоря нашу будущую логику программы, дальше пишем саму логику... если логика удовлетворяет нашим тестам то видим что тест прошел.. и идем дальше.
Имя класса и методов в которые будут производить тестирование моего класса не могут быть произвольными?
В какой момент именно будут вызываться данные тесты?
После компиляции моего кода, вызов тестов будет происходить каждый раз при запуске программы?
Использую Intellij Community, мне требуется устанавливать дополнительные плагины или есть уже по дефолту что то?
Буду рад если кто то объяснит максимально простыми словами.
@Entity
@JsonInclude(value = Include.NON_EMPTY)
public class Post extends AuditableEntry {
private String title;
@OneToMany(mappedBy = "post", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<Comment> comments;
public Post() {
}
public Post(UUID id) {
super(id);
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
Assert.hasText(title, "title cannot be null/empty/blank");
this.title = title;
}
public List<Comment> getComments() {
return comments;
}
@Override
public int hashCode() {
return super.hashCode();
}
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
}
И собственно сами тесты:
public class PostTest {
@Test
public void shouldReturnItsValues() {
UUID id = UUID.randomUUID();
Post post = new Post(id);
LocalDateTime createdAt = LocalDateTime.of(2018, 11, 22, 9, 30, 59);
LocalDateTime updatedAt = LocalDateTime.of(2018, 11, 23, 10, 50, 01);
post.setTitle("New post");
post.setContent("Bla bla");
post.setCreatedAt(createdAt);
post.setUpdatedAt(updatedAt);
assertThat(post.getId()).isEqualTo(id);
assertThat(post.getTitle()).isEqualTo("New post");
assertThat(post.getContent()).isEqualTo("Bla bla");
assertThat(post.getCreatedAt()).isEqualTo(createdAt);
assertThat(post.getUpdatedAt()).isEqualTo(updatedAt);
}
@Test()
public void shouldNotAcceptNullEmptyNorBlankTitle() {
Post post = new Post();
Assertions.assertThatThrownBy(() -> post.setTitle(null)).isInstanceOf(IllegalArgumentException.class);
Assertions.assertThatThrownBy(() -> post.setTitle("")).isInstanceOf(IllegalArgumentException.class);
Assertions.assertThatThrownBy(() -> post.setTitle(" ")).isInstanceOf(IllegalArgumentException.class);
}
@Test()
public void shouldNotAcceptNullEmptyNorBlankContent() {
Post post = new Post();
Assertions.assertThatThrownBy(() -> post.setContent(null)).isInstanceOf(IllegalArgumentException.class);
Assertions.assertThatThrownBy(() -> post.setContent("")).isInstanceOf(IllegalArgumentException.class);
Assertions.assertThatThrownBy(() -> post.setContent(" ")).isInstanceOf(IllegalArgumentException.class);
}
@Test
public void shouldHonorBasicHashcodeContract() {
UUID id = UUID.randomUUID();
Post post = newPost(id);
// Post has consistent hashcode
assertThat(post.hashCode()).isEqualTo(post.hashCode());
// 2 equal Post have same hashcode
assertThat(newPost(id).hashCode()).isEqualTo(newPost(id).hashCode());
}
@Test
public void shouldHonorBasicEqualsContract() {
Post post = newPost();
// equals to self
assertThat(post.equals(post)).isTrue();
// not equals to null
assertThat(post.equals(null)).isFalse();
// not equals to an instance of another class
assertThat(post.equals(new Object())).isFalse();
}
@Test
public void shouldBeEqualToAnotherPostWithSameNonNullID() {
UUID id = UUID.randomUUID();
UUID id2 = UUID.randomUUID();
while (id2.equals(id))
id2 = UUID.randomUUID();
// 2 Post with null id are not equal
assertThat(newPost().equals(newPost())).isFalse();
// 2 Post with same id are equal
assertThat(newPost(id).equals(newPost(id))).isTrue();
// 2 Post with different id not are equal
assertThat(newPost(id).equals(newPost(id2))).isFalse();
}
private Post newPost() {
return new Post() {
};
}
private Post newPost(UUID id) {
return new Post(id) {
};
}
}