У меня есть домашняя работа, где мне нужно создать веб-приложение J2EE.В моей команде мне нужно подготовить юнит-тесты, но в них много ошибок, и я не знаю, как их решить, поэтому я хотел бы попросить о помощи, пожалуйста.
Класс Customer:
public class Customer {
private int CustomerID;
private String email;
public int getCustomerID() {
return CustomerID;
}
public void setCustomerID(int CustomerID) {
this.CustomerID = CustomerID;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Класс CustomerDAO:
private final DataSource myDataSource;
public CustomerDAO(DataSource dataSource) {
this.myDataSource = dataSource;
}
public Customer LoginCustomer(int customerID, String email) throws DAOException {
Customer result = null;
String sql = "SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = ? AND EMAIL = ?";
try (Connection connection = myDataSource.getConnection();
PreparedStatement stmt = connection.prepareStatement(sql)) {
stmt.setInt(1, customerID);
stmt.setString(2, email);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
String name = rs.getString("NAME");
String address = rs.getString("ADDRESSLINE1");
result = new Customer();
result.setCustomerID(customerID);
result.setEmail(email);
}
}
} catch (SQLException ex) {
Logger.getLogger("DAO").log(Level.SEVERE, null, ex);
throw new DAOException(ex.getMessage());
}
return result;
}
}
Класс DAO:
public class DAO {
private final DataSource myDataSource;
public DAO(DataSource dataSource) {
this.myDataSource = dataSource;
}
public int addOrder(int ordernum, int idcustomer, int idproduct, int quantity, int shippingcost, Date salesDate, Date shippingDate, String company) throws SQLException {
int result = 0;
String sql = "INSERT INTO PURCHASE_ORDER VALUES=(?,?,?,?,?,?,?,?) ";
try (Connection connection = myDataSource.getConnection();
PreparedStatement stmt = connection.prepareStatement(sql)) {
stmt.setInt(1, ordernum);
stmt.setInt(2, idcustomer);
stmt.setInt(3, idproduct);
stmt.setInt(4, quantity);
stmt.setInt(5, shippingcost);
stmt.setDate(6, (java.sql.Date) salesDate);
stmt.setDate(7, (java.sql.Date) shippingDate);
stmt.setString(8, company);
result = stmt.executeUpdate();
}
return result;
}
public int deleteOrder(int OrderNum) throws SQLException {
int result = 0;
String sql = "DELETE FROM PURCHASE_ORDER WHERE ORDER_NUM = ?";
try (Connection connection = myDataSource.getConnection();
PreparedStatement stmt = connection.prepareStatement(sql)) {
stmt.setInt(1, OrderNum);
result = stmt.executeUpdate();
}
return result;
}
public int changeOrder(int Qte, int ordernum) throws SQLException {
int result=0;
String sql = "UPDATE PURCHASE_ORDER SET QUANTITY = ? WHERE ORDER_NUM=?";
try (Connection connection = myDataSource.getConnection();
PreparedStatement stmt = connection.prepareStatement(sql)) {
stmt.setInt(1, Qte);
stmt.setInt(2, ordernum);
result=stmt.executeUpdate();
}
return result;
}
Класс DataSouceFactory:
public class DataSourceFactory {
public enum DriverType {
embedded, server
};
// Choic du type de driver : embedded ou serveur
private static final DriverType TYPE = DriverType.embedded;
/**
* Renvoie la source de données (server ou embbeded)
*
* @return la source de données
*/
public static DataSource getDataSource() {
ds.setDatabaseName("sample");
ds.setUser("app");
ds.setPassword("app");
// The host on which Network Server is running
ds.setServerName("localhost");
// port on which Network Server is listening
ds.setPortNumber(1527);
return ds;
}
}
Класс Product: открытый класс Product {
private int idproduct;
private int idmanufacturer;
private String productcode;
private int purchasecost;
private int quantityonhand;
private int markup;
private String available;
private String description;
public Product(int idproduct, int idmanufacturer, String productcode, int purchasecost, int quantityonhand, int markup, String available, String description){
this.idproduct=idproduct;
this.idmanufacturer=idmanufacturer;
this.productcode=productcode;
this.purchasecost=purchasecost;
this.quantityonhand=quantityonhand;
this.markup=markup;
this.available=available;
this.description=description;
}
//GETTER
public int getIdProduct() {
return idproduct;
}
public int getIdManufacturer(){
return idmanufacturer;
}
public String getProductCode(){
return productcode;
}
public int getPurchaseCost(){
return purchasecost;
}
public int getQuantityOnHand(){
return quantityonhand;
}
public int getMarkup(){
return markup;
}
public String getAvailable(){
return available;
}
public String getDescription(){
return description;
}
}
Класс PurchaseOrder:
public class PurchaseOrder {
private int ordernum;
private int idcustomer;
private int idproduct;
private int quantity;
private int shippingcost;
private Date salesDate;
private Date shippingDate;
private String company;
public PurchaseOrder(int ordernum, int idcustomer, int idproduct, int quantity, int shippingcost, Date salesDate, Date shippingDate, String company) {
this.ordernum=ordernum;
this.idcustomer=idcustomer;
this.idproduct=idproduct;
this.quantity=quantity;
this.shippingcost=shippingcost;
this.salesDate=salesDate;
this.shippingDate=shippingDate;
this.company=company;
}
//GETTER
public int getOrderNumber() {
return ordernum;
}
public int getIdCustomer() {
return idcustomer;
}
public int getIdProduct(){
return idproduct;
}
public int getShippingCost(){
return shippingcost;
}
public Date getSalesDate() {
return salesDate;
}
public Date getShippingDate() {
return shippingDate;
}
public String getCompany() {
return company;
}
}
Класс DAOException:
public class DAOException extends Exception {
/**
* Creates a new instance of <code>DAOException</code> without detail
* message.
*/
public DAOException() {
}
/**
* Constructs an instance of <code>DAOException</code> with the specified
* detail message.
*
* @param msg the detail message.
*/
public DAOException(String msg) {
super(msg);
}
}
Класс модульного тестирования:
public class DAOTest {
private DAO myDAO;
private DataSource myDataSource;
private static Connection myConnection;
/**
* Test for the data base
*/
@Before
//Test la création de la BDD.
public void createBDD() throws SQLException {
myDataSource = getDataSource();
myConnection = myDataSource.getConnection();
myDAO = new DAO(myDataSource);
}
@After
//Test la destruction de la BDD.
public void deleteBDD() throws SQLException {
myConnection.close();
myDAO = null;
}
@Test
//Test le remplissage de la BDD à partir d'un fichier sql.
private void fillBDD(String file, Connection myConnection) throws SQLException {
String path = DAOTest.class.getResource(file).getFile();
SqlFile fileSQL = new SqlFile(new File(path));
fileSQL.setConnection(myConnection);
fileSQL.execute();
fileSQL.closeReader();
}
/**
* Test for the class dataSourceFactory
*/
//Test l'acquisition de la source de donnée.
@Test
public void getDataSource() throws DAOException {
org.hsqldb.jdbc.JDBCDataSource ds = new org.hsqldb.jdbc.JDBCDataSource();
ds.setDatabase("jdbc:hsqldb:mem:testcase;shutdown=true");
ds.setUser("username");
ds.setPassword("password");
return ds;
}
/**
* Test for the class CustomerDAO
*/
@Test
// Test si le login fonctionne
public void logIN() throws DAOException {
int customerID = 1;
String email = "test@example.com";
assertEquals(customerID, myDAO.identification(email));
}
/**
* Test for the class ???
*/
@Test
//Test le calcule du prix du produit.
public void finalPrice() {
float price = 10;
int quantity = 1;
float discountRate = 0;
float shippingcost = 10;
float markup = 0;
assertEquals(price * quantity * 0.01 * (1 - discountRate) + shippingcost, "Méthode qui calcule le prix final");
}
}
Я не знаю, может ли это помочь, но мы сделали для этого немного мерзавца: https://github.com/Selena00/ProjetTechnoWeb
Ну, первая проблема, с которой я столкнулся в классе юнит-тестирования, заключается в том, чтокогда я выполняю «throws DAOException», у меня возникает ошибка, определяющая его местоположение.
То же самое с «private DAO myDAO», это говорит о том, что символ DAO не может быть найден.И эта проблема присутствует везде, где я создаю новый «DAO».Опять же, у меня проблема с тестом «fillBDD», где он снова говорит, что символ SqlFile не найден.
Наконец, в тесте «getDataSource» в первой строке говорится, что пакет org.hsqlsb.jsbc не существует.
Во всем вышеупомянутом случае единственное, что он предложил мне, - это поиск зависимостей в репозиториях Maven, но безуспешно.
Впоследствии, если некоторые людимогу дать мне несколько советов о том, как делать тесты: "addOrder", "deleteOrder" и "changeOrder", я был бы очень благодарен.Для этих трех тестов я не знаю, с чего начать: /.
Заранее спасибо тем, кто нашел время, чтобы помочь мне: D.