Commit 1c664372 authored by Suresh Kumar's avatar Suresh Kumar

Unit-Testing

parent 6c965654
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.crudoperation</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>JunitTesting</name>
<description>Unit Testing </description>
<properties>
<java.version>1.8</java.version>
<junit-platform.version>5.5.2</junit-platform.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
package com.crudoperation.Controller;
import java.util.List;
import com.crudoperation.Model.Course;
import com.crudoperation.Service.CourseService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Autowired;
@RestController
public class CourseController {
@Autowired
CourseService courseService;
@GetMapping("/courses")
public List<Course> getAllStudents() {
return this.courseService.getAllCourses();
}
@GetMapping("/courses/{id}")
public Course getCourseByID(@PathVariable("id") int cid) {
return this.courseService.getCourseByID(cid);
}
@PostMapping("/courses")
public Course addCourse(@RequestBody Course course) {
Course co = this.courseService.addCourse(course);
return co;
}
@PutMapping("/courses/{courseId}")
public Course updateCourse(@RequestBody Course course, @PathVariable("courseId")int courseId) {
this.courseService.updateCourse(course, courseId);
return course;
}
@DeleteMapping("/courses/{courseId}")
public void deleteCourse(@PathVariable("courseId") int courseId) {
this.courseService.deleteCourseById(courseId);
}
}
\ No newline at end of file
package com.crudoperation.Controller;
import java.util.List;
import com.crudoperation.Model.Student;
import com.crudoperation.Service.StudentService;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Autowired;
@RestController
public class StudentController {
@Autowired
StudentService studentService;
@GetMapping("/students")
public List<Student> getAllStudents() {
return this.studentService.getAllStudents();
}
@GetMapping("/students/{id}")
public Student getStudentByID(@PathVariable("id") int id) {
return this.studentService.getStudentByID(id);
}
@PostMapping("/students")
public Student addStudent(@RequestBody Student student) {
Student st = this.studentService.addStudent(student);
return st;
}
@PutMapping("/students/{studentId}")
public Student updateStudent(@RequestBody Student student, @PathVariable("studentId")int studentId) {
this.studentService.updateStudent(student, studentId);
return student;
}
@DeleteMapping("/students/{studentId}")
public void deleteStudent(@PathVariable("studentId") int studentId) {
this.studentService.deleteStudentById(studentId);
}
}
package com.crudoperation;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class JunitTestingApplication {
public static void main(String[] args) {
SpringApplication.run(JunitTestingApplication.class, args);
System.out.println("Project Started....................!!");
}
}
package com.crudoperation.Model;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
import lombok.ToString;
import java.util.ArrayList;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Entity;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.JoinTable;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "course")
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer cid;
private String cname;
// @ManyToMany
// @JoinTable(name="student_course", joinColumns=@JoinColumn(name="cid"),
// inverseJoinColumns=@JoinColumn(name="sid"))
// private List <Student> students = new ArrayList<>();
}
\ No newline at end of file
package com.crudoperation.Model;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
import lombok.ToString;
import java.util.ArrayList;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Entity;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import javax.persistence.ManyToMany;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer sid;
private String rno;
private String name;
public Student(String rno , String name){
this.rno = rno;
this.name = name;
}
// @ManyToMany(mappedBy ="students")
// private List<Course> courses = new ArrayList<>();
}
\ No newline at end of file
package com.crudoperation.Repository;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.crudoperation.Model.Course;
@Repository
public interface CourseRepository extends CrudRepository <Course , Integer>{
Course findById(int cid);
}
\ No newline at end of file
package com.crudoperation.Repository;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.crudoperation.Model.Student;
@Repository
public interface StudentRepository extends CrudRepository<Student, Integer>{
Student findById( int sid);
Student findByName(String name);
Student deleteById(int id);
}
package com.crudoperation.Service;
import java.util.List;
import com.crudoperation.Model.Course;
public interface CourseService {
public List<Course> getAllCourses();
// Students get by id
public Course getCourseByID(int cid);
// Add student records
public Course addCourse(Course co);
//Delete by id
public void deleteCourseById(int coid);
// Update records
public Course updateCourse(Course course, int CourseId);
}
package com.crudoperation.Service;
import java.util.List;
import com.crudoperation.Model.Course;
import org.springframework.stereotype.Service;
import com.crudoperation.Repository.CourseRepository;
import org.springframework.beans.factory.annotation.Autowired;
@Service
public class CourseServiceImpl implements CourseService {
@Autowired
private CourseRepository crepo;
@Override
public List<Course> getAllCourses() {
List<Course> list = (List<Course>) crepo.findAll();
return list;
}
@Override
public Course getCourseByID(int cid) {
Course course = null;
course = crepo.findById(cid);
return course;
}
@Override
public Course addCourse(Course co) {
crepo.save(co);
return co;
}
@Override
public void deleteCourseById(int coid) {
this.crepo.deleteById(coid);
}
@Override
public Course updateCourse(Course course, int CourseId) {
course.setCid(CourseId);
Course course1 = crepo.save(course);
return course1;
}
}
\ No newline at end of file
package com.crudoperation.Service;
import java.util.List;
import com.crudoperation.Model.Student;
public interface StudentService {
//Get All Students
public List<Student> getAllStudents();
// Students get by id
public Student getStudentByID(int id);
// Add student records
public Student addStudent(Student st);
//Delete by id
public void deleteStudentById(int ssid);
// Update records
public Student updateStudent(Student student, int studentId);
}
\ No newline at end of file
package com.crudoperation.Service;
import java.util.List;
import org.springframework.stereotype.Service;
import com.crudoperation.Model.Student;
import com.crudoperation.Repository.StudentRepository;
import org.springframework.beans.factory.annotation.Autowired;
@Service
public class StudentServiceImpl implements StudentService{
@Autowired
private StudentRepository studentRepository;
@Override
public List<Student> getAllStudents() {
List<Student> list = (List<Student>) studentRepository.findAll();
return list;
}
@Override
public Student getStudentByID(int id) {
Student student = null;
student = studentRepository.findById(id);
return student;
}
@Override
public Student addStudent(Student st) {
Student student= studentRepository.save(st);
return student;
}
@Override
public void deleteStudentById(int ssid) {
this.studentRepository.deleteById(ssid);
}
@Override
public Student updateStudent(Student student, int studentId) {
student.setSid(studentId);
Student st = studentRepository.save(student);
return st;
}
}
server.port=8083
spring.datasource.name=TestingPractice
spring.datasource.url=jdbc:mysql://localhost:3306/TestingPractice?characterEncoding=utf8
spring.datasource.username= root
spring.datasource.password=nisum123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
package com.crudoperation;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class JunitTestingApplicationTests {
@Test
void contextLoads() {
}
}
package com.crudoperation.Service;
import com.crudoperation.Model.Course;
import com.crudoperation.Model.Student;
import com.crudoperation.Repository.CourseRepository;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)
class CourseServiceImplTest {
@InjectMocks private CourseServiceImpl courseServiceImpl;
@Mock private CourseRepository courseRepository;
@Test
void getAllCourses() {
when(courseRepository.findAll()).thenReturn(Stream.of(new Course(1, "Java"), new Course(2, "Python")).collect(Collectors.toList()));
assertEquals(2, courseServiceImpl.getAllCourses().size());
}
@Test
void getCourseByID() {
Course course = new Course(3, "JavaScript");
when(courseRepository.findById(3)).thenReturn(course);
Course courseResult = courseServiceImpl.getCourseByID(3);
assertEquals(course, courseResult);
}
@Test
void addCourse() {
Course courseadd = new Course(4, "PHP");
when(courseRepository.save(courseadd)).thenReturn(courseadd);
Course courseadded = courseServiceImpl.addCourse(courseadd);
assertEquals(courseadd, courseadd);
}
//
@Test
void deleteCourseById() {
Course coursedelete = new Course(5, "JQuery");
courseServiceImpl.deleteCourseById(coursedelete.getCid());
verify(courseRepository, times(1)).deleteById(5);
}
@Test
void updateCourse() {
Course course = new Course();
course.setCid(6);
course.setCname("Automation");
Mockito.when(courseRepository.save(course)).thenReturn(null);
course.setCname("C++");
Mockito.when(courseRepository.save(course)).thenReturn(course);
assertEquals(course, courseServiceImpl.updateCourse(course, course.getCid()));
}
}
\ No newline at end of file
package com.crudoperation.Service;
import org.junit.jupiter.api.Assertions;
import org.mockito.Mock;
import org.mockito.InjectMocks;
import java.util.stream.Stream;
import org.junit.jupiter.api.Test;
import java.util.stream.Collectors;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.junit.jupiter.api.Assertions.assertFalse;
import com.crudoperation.Model.Student;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import com.crudoperation.Repository.StudentRepository;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.*;
import com.crudoperation.Model.Student;
@ExtendWith(MockitoExtension.class)
class StudentServiceImplTest {
@InjectMocks
private StudentServiceImpl studentServiceImpl;
@Mock private StudentRepository studentRepository;
@Test
public void getAllStudents() {
when(studentRepository.findAll()).thenReturn(Stream.of(new Student(1, "101", "Suresh"), new Student(2, "102", "Rayyan Hasan")).collect(Collectors.toList()));
assertEquals(2, studentServiceImpl.getAllStudents().size());
}
@Test
void getStudentByID() {
Student s3 = new Student(3, "103", "M_Ameen");
when(studentRepository.findById(3)).thenReturn(s3);
Student studentResult = studentServiceImpl.getStudentByID(3);
assertEquals(s3, studentResult);
}
@Test
void addStudent() {
//GIVEN
Student st2 = new Student(2, "102", "Rayyan Hasan");
when(studentRepository.save(st2)).thenReturn(st2);
//WHEN
Student studentResult = studentServiceImpl.addStudent(st2);
//THEN
assertEquals(st2, studentResult);
}
@Test
void updateStudent() {
Student student = new Student();
student.setSid(3);
student.setRno("103");
student.setName("Danish");
Mockito.when(studentRepository.save(student)).thenReturn(null);
// Assertions.assertEquals(student, student.getSid());
student.setName("Suresh");
Mockito.when(studentRepository.save(student)).thenReturn(student);
assertEquals(student, studentServiceImpl.updateStudent(student, student.getSid()));
}
@Test
public void deleteStudentById() {
Student studentdelete = new Student(5, "105", "Suresh Kumar");
studentServiceImpl.deleteStudentById(studentdelete.getSid());
verify(studentRepository, times(1)).deleteById(5);
}
}
\ No newline at end of file
# assignments_new
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment