Koledzy podpowiedzcie jak przetestować w Spock mój serwis z dao ? Chciałbym przetestować metody findAll i findProductByBarcode
@Service
public class ProductServiceImpl implements ProductService {
private ProductDao productDao;
@Autowired
public ProductServiceImpl(ProductDao productDao) {
this.productDao = productDao;
}
public Collection<Product> findAll() {
return productDao.findAll();
}
public ProductDto findProductByBarcode(String barcode) {
return productDao.findProductByBarcode(barcode);
}
}
Do tego mam Dao :
@Repository
@Log
public class ProductDaoImpl implements ProductDao {
private final JdbcTemplate jdbcTemplate;
@Autowired
public ProductDaoImpl(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void dropCreateTable() {
log.info("Creat table");
jdbcTemplate.execute("DROP TABLE PRODUCTS IF EXISTS");
jdbcTemplate.execute("CREATE TABLE PRODUCTS(" +
"ID INT,NAME VARCHAR(100),BARCODE VARCHAR(20),PRICE DECIMAL )");
}
public void insertInToTable() {
log.info("Insert into table");
jdbcTemplate.batchUpdate("INSERT INTO PRODUCTS (ID,NAME,PRICE,BARCODE) " +
"VALUES(1,'Telefon',100,'Prod_56154')," +
"(2,'Telewizor',299,'Prod_12658')," +
"(3,'Pralka',450,'Prod_45896')," +
"(4,'Kalkulator',99,'Prod_36578')," +
"(5,'Drukarka',150,'Prod_98756')," +
"(6,'Komputer',800,'Prod_10654')," +
"(7,'Monitor',340,'Prod_78412')");
}
@Override
public Collection<Product> findAll() {
return this.jdbcTemplate.query("SELECT * FROM PRODUCTS", new BeanPropertyRowMapper<Product>(Product.class));
}
@Override
public ProductDto findProductByBarcode(String barcode) {
List query = this.jdbcTemplate.query("SELECT * FROM PRODUCTS WHERE BARCODE = ?", new Object[]{barcode}, new ProductMapper());
if (query.size() == 1) {
return (ProductDto) query.get(0);
} else {
return null;
}
}
}
A to jest to co próbuje kombinować :
class ProductServiceImplTest extends Specification {
@Shared
JdbcTemplate jdbcTemplate
@Shared
ProductDao dao;
@Shared
ProductService productService;
def setupSpec() {
jdbcTemplate = Stub()
dao = new ProductDaoImpl(jdbcTemplate)
productService = new ProductServiceImpl(dao);
}
def "FindAll"() {
when:
dao.dropCreateTable()
dao.insertInToTable()
then: dao.findAll().size() != productService.findAll().size()
}
def "FindProductByBarcode"() {
}
}