The problem is that the test not be recognizing the car object even though they are identical. I am getting a java.lang.assertion
error. Are they of the wrong type or is this from another error? Please comment if more code is required.
The error:
Testing class:
import DAO.CarDAO;
import DAO.CarJdbcDAO;
import Domain.Car;
import java.math.BigDecimal;
import static org.hamcrest.CoreMatchers.hasItem;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.Matchers.hasSize;
import static org.junit.Assert.assertThat;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/**
*
* @author shika823
*/
public class CarJdbcDAOTest {
public CarJdbcDAOTest() {
}
/**
*
* @author shika823
*/
private CarDAO dao = new CarJdbcDAO("jdbc:h2:mem:test;INIT=runscript from 'src/main/java/DAO/schema.sql'");
private Car car1;
private Car car2;
private Car car3;
// String carName, int carId, String carType, String seatNumber, BigDecimal hourlyCharge, String location) {
@BeforeEach
public void setUp() {
car1 = new Car();
car1.setCarId("12412");
car1.setCarName("Car sokmet");
car1.setCarType("A type");
car1.setSeatNumber("1");
car1.setHourlyCharge(new BigDecimal("4.00"));
car1.setLocation("30 Duke Street");
car2 = new Car();
car2.setCarId("12902");
car2.setCarName("Car sething");
car2.setCarType("A tyjksspe");
car2.setSeatNumber("2");
car2.setHourlyCharge(new BigDecimal("3.00"));
car2.setLocation("28 Duke Street");
//
car3 = new Car();
car3.setCarId("1862");
car3.setCarName("Car setng");
car3.setCarType("yjksspe");
car3.setSeatNumber("8");
car3.setHourlyCharge(new BigDecimal("3.00"));
car3.setLocation("98 Duke Street");
dao.saveCar(car1);
dao.saveCar(car2);
}
@AfterEach
public void tearDown() {
dao.removeCar(car1);
dao.removeCar(car2);
}
@Test
public void testSaveCar() {
dao.saveCar(car3);
assertThat(dao.getCars(), hasItem(car1));
assertThat(dao.getCars(), hasItem(car2));
assertThat(dao.getCars(), hasItem(car3));
dao.removeCar(car3);
}
@Test
public void testGetCars() {
assertThat(dao.getCars(), hasItem(car1));
}
@Test
public void testRemoveCar() {
dao.removeCar(car1);
assertThat(dao.getCars(), hasSize(1));
assertThat(dao.getCars(), not(hasItem(car1)));
}
}
Here is my jdbc dao class:
[enter image description here][1]import Domain.Car;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
/**
*
* @author jamespettitt
*/
public class CarJdbcDAO implements CarDAO {
private String url = JdbcConnection.getDefaultConnectionUri();
public CarJdbcDAO() {
}
public CarJdbcDAO(String uri) {
this.url = uri;
}
@Override
public void saveCar(Car car) {
String sql = "merge into car (car_id, car_Name, car_Type, Seat_Number, Hourly_Charge, Location) values (?, ?, ?, ?, ?, ?)";
try (
Connection dbCon = JdbcConnection.getConnection(url);
PreparedStatement stmt = dbCon.prepareStatement(sql);) {
stmt.setString(1, car.getCarId());
stmt.setString(2, car.getCarName());
stmt.setString(3, car.getCarType());
stmt.setString(4, car.getSeatNumber());
stmt.setBigDecimal(5, car.getHourlyCharge());
stmt.setString(6, car.getLocation());
stmt.executeUpdate();
} catch (SQLException ex) {
throw new DAOException(ex.getMessage(), ex);
}
}
@Override
public Collection<Car> getCars() {
String sql = "select * from Car";
try (
Connection dbCon = JdbcConnection.getConnection(url); //get connection to db
PreparedStatement stmt = dbCon.prepareStatement(sql); //create stmt
) {
ResultSet rs = stmt.executeQuery();
ArrayList<Car> cars = new ArrayList<>();
//iterate through query results
while (rs.next()) {
String carId = rs.getString("Car_Id");
String carName = rs.getString("Car_Name");
String carType = rs.getString("Car_Type");
String seatNumber = rs.getString("Seat_Number");
BigDecimal hourlyCharge = rs.getBigDecimal("Hourly_Charge");
String location = rs.getString("Location");
Car car = new Car(carId, carName, carType, seatNumber, hourlyCharge, location);
cars.add(car);
}
return cars;
} catch (SQLException ex) {
throw new DAOException(ex.getMessage(), ex);
}
}
@Override
public void removeCar(Car car) {
String sql = "delete from car where car_ID = ?";
try (
Connection dbCon = JdbcConnection.getConnection(url);
PreparedStatement stmt = dbCon.prepareStatement(sql);) {
stmt.setString(1, car.getCarId());
stmt.executeUpdate();
} catch (SQLException ex) {
throw new DAOException(ex.getMessage(), ex);
}
}
@Override
public Collection<Car> filterByType(String carType) {
String sql = "select * from car where Type = ?";
System.out.println(carType);
try (
Connection dbCon = JdbcConnection.getConnection(url);
PreparedStatement stmt = dbCon.prepareStatement(sql);) {
stmt.setString(1, carType);
ResultSet rs = stmt.executeQuery();
List<Car> typeList = new ArrayList<>();
while (rs.next()) {
Car car = new Car(
rs.getString("Car_id"),
rs.getString("car_Name"),
rs.getString("car_Type"),
rs.getString("Seat_Number"),
rs.getBigDecimal("Hourly_Charge"),
rs.getString("Location")
);
System.out.println(car);
typeList.add(car);
}
return typeList;
} catch (SQLException ex) {
throw new DAOException(ex.getMessage(), ex);
}
}
@Override
public Collection<Car> filterBySeatNumber(String seatNumber) {
String sql = "select * from car where Seat_Number = ?";
System.out.println(seatNumber);
try (
Connection dbCon = JdbcConnection.getConnection(url);
PreparedStatement stmt = dbCon.prepareStatement(sql);) {
stmt.setString(1, seatNumber);
ResultSet rs = stmt.executeQuery();
ArrayList<Car> seatNumberList = new ArrayList<>();
while (rs.next()) {
Car car = new Car(
rs.getString("Car_id"),
rs.getString("car_Name"),
rs.getString("car_Type"),
rs.getString("Seat_Number"),
rs.getBigDecimal("Hourly_Charge"),
rs.getString("Location")
);
System.out.println(car);
seatNumberList.add(car);
}
return seatNumberList;
} catch (SQLException ex) {
throw new DAOException(ex.getMessage(), ex);
}
}
}