Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions src/main/java/object/example/lannguyen/Nguyen.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package object.example.lannguyen;



public class Nguyen {

private String firstName;
private String lastName;
private int age;
private int grade;
private String major;

// Constructor
public Nguyen(String firstName, String lastName, int age, int grade, String major) {

if (age < 0) {
throw new IllegalArgumentException("Age cannot be negative");
}

if (grade < 0 || grade > 100) {
throw new IllegalArgumentException("Grade must be between 0 and 100");
}

this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.grade = grade;
this.major = major;
}

// Getters
public String getFirstName() {
return firstName;
}

public String getLastName() {
return lastName;
}

public int getAge() {
return age;
}

public int getGrade() {
return grade;
}

public String getMajor() {
return major;
}

// Setters
public void setAge(int age) {
if (age < 0) {
throw new IllegalArgumentException("Age cannot be negative");
}
this.age = age;
}

public void setGrade(int grade) {
if (grade < 0 || grade > 100) {
throw new IllegalArgumentException("Grade must be between 0 and 100");
}
this.grade = grade;
}

public void setMajor(String major) {
this.major = major;
}

// Custom method
public boolean isPass() {
return grade > 60;
}

// toString override
@Override
public String toString() {
return "Nguyen{" +
"firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", age=" + age +
", grade=" + grade +
", major='" + major + '\'' +
'}';
}
}
174 changes: 174 additions & 0 deletions src/test/java/object/example/lannguyen/NguyenTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
package object.example.lannguyen;


import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;

public class NguyenTest {

@Test
void constructorHappyPath() {
// Arrange
String firstName = "Helen";
String lastName = "Tran";

// Act
Nguyen student = new Nguyen(firstName, lastName, 24, 90, "Computer Science");

// Assert
assertEquals("Helen", student.getFirstName());
assertEquals("Tran", student.getLastName());
assertEquals(24, student.getAge());
assertEquals(90, student.getGrade());
assertEquals("Computer Science", student.getMajor());
}
@Test
void testToString() {

// Arrange
Nguyen student = new Nguyen("Helen", "Tran", 24, 90, "Computer Science");

// Act
String result = student.toString();

// Assert
assertTrue(result.contains("Helen"));
assertTrue(result.contains("Tran"));
}
@Test
void testSetMajor() {

// Arrange
Nguyen student = new Nguyen("Helen", "Tran", 24, 90, "CS");

// Act
student.setMajor("Math");

// Assert
assertEquals("Math", student.getMajor());
}
@Test
void testSetAgeValidation() {

// Arrange
Nguyen student = new Nguyen("Helen", "Tran", 24, 90, "CS");

// Act + Assert
assertThrows(IllegalArgumentException.class, () -> {
student.setAge(-1);
});
}
@Test
void testSetGradeValidation() {

// Arrange
Nguyen student = new Nguyen("Helen", "Tran", 24, 90, "CS");

// Act + Assert
assertThrows(IllegalArgumentException.class, () -> {
student.setGrade(150);
});
}
@Test
void testIsPassEdgeCase() {

// Arrange
Nguyen student = new Nguyen("Helen", "Tran", 24, 60, "CS");

// Act
boolean result = student.isPass();

// Assert
assertFalse(result);
}
@Test
void constructorThrowsWhenGradeTooLow() {

// Arrange + Act + Assert
assertThrows(IllegalArgumentException.class, () -> {
new Nguyen("Helen", "Tran", 24, -5, "CS");
});
}
@Test
void constructorThrowsWhenGradeTooHigh() {

// Arrange + Act + Assert
assertThrows(IllegalArgumentException.class, () -> {
new Nguyen("Helen", "Tran", 24, 120, "CS");
});
}
@Test
void constructorThrowsWhenAgeNegative() {

// Arrange + Act + Assert
assertThrows(IllegalArgumentException.class, () -> {
new Nguyen("Helen", "Tran", -1, 90, "CS");
});
}
@Test
void setGradeTooHighThrowsException() {

Nguyen student = new Nguyen("Helen", "Tran", 24, 90, "CS");

assertThrows(IllegalArgumentException.class, () -> {
student.setGrade(200);
});
}
@Test
void setGradeTooLowThrowsException() {

Nguyen student = new Nguyen("Helen", "Tran", 24, 90, "CS");

assertThrows(IllegalArgumentException.class, () -> {
student.setGrade(-10);
});
}
@Test
void constructorValidationThrowsException() {
// Arrange
int invalidAge = -5;

// Act + Assert
assertThrows(IllegalArgumentException.class, () -> {
new Nguyen("John", "Smith", invalidAge, 80, "Math");
});
}

@Test
void testGettersAndSetters() {
// Arrange
Nguyen student = new Nguyen("Helen", "Tran", 24, 90, "CS");

// Act
student.setAge(30);
student.setGrade(95);

// Assert
assertEquals(30, student.getAge());
assertEquals(95, student.getGrade());
}

@Test
void isPassHappyPath() {
// Arrange
Nguyen student = new Nguyen("Helen", "Tran", 24, 90, "CS");

// Act
boolean result = student.isPass();

// Assert
assertTrue(result);
}

@Test
void isPassEdgeCase() {
// Arrange
Nguyen student = new Nguyen("Helen", "Tran", 24, 60, "CS");

// Act
boolean result = student.isPass();

// Assert
assertFalse(result);
}
}