d10s Posted March 25, 2012 at 05:00 PM Report #445590 Posted March 25, 2012 at 05:00 PM Boa Tarde, estou a tentar compreender o código ao logo das aulas de programação, já tive P1 e ainda não aprendi que não é a passar código que aprendo a programar, mas sim a retirar as ideias, funcionamento do código. O código que vou meter é sobre uma máquina de vendas que terá as suas classes de teste da máquina. -> Sei que dará algum trabalho, mas alguns métodos não entendo de maneira nenhuma, será possível alguém explicar? -> Ainda me faltam alguns teste para realmente passar, não se preocupem com isso. Classe Dispenser /** * */ package pt.ipbeja.estig.p2; /** * @author * */ public class Dispenser { private MoneyBox coinBox; // número de dinheiro na máquina private int nProducts; // número de produtos da máquina private int price; // dinheiro public static final int COIN10 = 10; public static final int COIN20 = 20; public static final int COIN50 = 50; // As moedas que a máquina recebe e podem ser chamadas em qualquer classe public Dispenser(int price) { this.coinBox = new MoneyBox(price); // coinBox é onde guarda os dinheiro actual this.nProducts = 100; // máquina inicia-se com 100 produtos // this.totalMoney = 0; // this.register = register; } // public int insertCoin(int value) // { // this.insertedMoney += value; // return this.insertedMoney; // } public int insertCoin(int value) { return this.coinBox.insertCoin(value); // devolve o valor do dinheiro que foi inserido no momento } public int sellProduct() // não entendi este método { if (this.nProducts > 0) { int change = this.coinBox.sellProduct(); if (change >= 0) { this.nProducts--; return change; } } return this.cancel(); } public int getNumProducts() { return this.nProducts; // devolve o nº de produtos actuais na máquina } public int getStoredMoney() { return this.coinBox.getStoredMoney(); // devolve o valor do dinheiro inserido até ao momento } public int cancel() { return this.coinBox.cancel(); // cancela a compra? não permite a compra? } public int ChangePrice() { return 0; } public int ChangenProducts() { return 0; } public int nProductsQuery() { return 0; } public int MoneyBoxQuery() { return 0; } public int getProdPrice() { return this.coinBox.getPrice(); } public void changeProdPrice(int prodPrice) { this.coinBox.changeProdPrice(prodPrice); } } Classe DispenserTest package pt.ipbeja.estig.p2; import static org.junit.Assert.assertEquals; import java.util.Arrays; import org.junit.Before; import org.junit.Test; public class DispenserTest { private final int PRODUCT_PRICE = 40; // o valor($) dos produtos que estão na máquina private Dispenser dispenser; // não entendi o que faz??? @Before public void setUp() throws Exception { this.dispenser = new Dispenser(PRODUCT_PRICE); // não entendi o que faz??? } @Test public void testInsertCoin() { int value = this.dispenser.insertCoin(Dispenser.COIN50); // insere uma moeda de 50 value = this.dispenser.insertCoin(Dispenser.COIN20); // insere uma moeda de 20 value = this.dispenser.insertCoin(Dispenser.COIN20); // insere uma moeda de 20 assertEquals(90, value); // 90 = valor esperado // value = valor que realmente dará no teste value = this.dispenser.insertCoin(Dispenser.COIN20); // insere novamente uma moeda de 20 assertEquals(110, value); // 110 = valor esperado // value = valor que realmente dará no teste } @Test public void testSellProduct() { int storedMoneyBefore = this.dispenser.getStoredMoney(); // o valor de dinheiro que existia antes na máquina (storedMoneyBefore) é igual ao valor devolvido no return do metodo? int nProductsBefore = this.dispenser.getNumProducts(); // o valor de produtos que existia antes na máquina (nProductsBefore) é igual ao valor devolvido no return do metodo? int value = this.dispenser.insertCoin(Dispenser.COIN50); // insere uma moeda de 50 assertEquals(Dispenser.COIN50, value); // 50 = valor esperado // value = valor que realmente dará no teste int change = this.dispenser.sellProduct(); // não entendi o que faz??? assertEquals(Dispenser.COIN10, change); //troco? vai devolver uma moeda de 10? int nProductsAfter = this.dispenser.getNumProducts(); assertEquals(nProductsBefore - 1, nProductsAfter); // nProductsBefore - 1 = vai ao total do nº de produtos que a máquina tem e desconta um // nProductsAfter = o número de produtos que realmente dá // e o número de produtos que realmente dá é o = this.dispenser.getNumProducts int storedMoneyAfter = this.dispenser.getStoredMoney(); assertEquals(storedMoneyBefore - PRODUCT_PRICE, storedMoneyAfter); // storedMoneyBefore + PRODUCT_PRICE = vai ao total do dinheiro e retira o valor do produto vendido // storedMoneyAfter = o número de dinheiro que estava antes de descontar a compra // e o valor em "caixa" é dado depois pelo = this.dispenser.getNumProducts assertEquals(Dispenser.COIN10, change); //troco? vai devolver uma moeda de 10? change = this.dispenser.sellProduct(); // não entendi??? assertEquals(0, change); // não entendi??? value = this.dispenser.insertCoin(Dispenser.COIN20); // insere uma moeda de 20 change = this.dispenser.sellProduct(); // não entendi??? assertEquals(20, change); nProductsAfter = this.dispenser.getNumProducts(); assertEquals(nProductsBefore - 1, nProductsAfter); // nProductsBefore - 1 = vai ao total do nº de produtos que a máquina tem e desconta um // nProductsAfter = o número de produtos que realmente dá // e o número de produtos que realmente dá é o = this.dispenser.getNumProducts } @Test public void testInsufficientMoney() { // Este método é semelhante ao de cima, apenas é um teste com uma moeda inválida, // acho que se entender o anterior percebo este. // final int INVALID_COIN5 = 5; int storedMoneyBefore = this.dispenser.getStoredMoney(); int nProductsBefore = this.dispenser.getNumProducts(); int value = this.dispenser.insertCoin(Dispenser.COIN20); // value = this.dispenser.insertCoin(INVALID_COIN5); assertEquals(Dispenser.COIN20, value); int change = this.dispenser.sellProduct(); // <----------------------------- assertEquals(20, change); int nProductsAfter = this.dispenser.getNumProducts(); assertEquals(nProductsBefore, nProductsAfter); int storedMoneyAfter = this.dispenser.getStoredMoney(); assertEquals(storedMoneyBefore, storedMoneyAfter); } @Test public void testCancelledSell() { // Não entendi quase nada do que faz, deve ser para cancelar uma compra na falta de $$$ ou algo do género. int storedMoneyBefore = this.dispenser.getStoredMoney(); int nProductsBefore = this.dispenser.getNumProducts(); int value = this.dispenser.insertCoin(Dispenser.COIN20); value = this.dispenser.insertCoin(Dispenser.COIN10); assertEquals(Dispenser.COIN20 + Dispenser.COIN10, value); int returnedValue = this.dispenser.cancel(); // <--------------------------------- assertEquals(Dispenser.COIN20 + Dispenser.COIN10, returnedValue); int nProductsAfter = this.dispenser.getNumProducts(); assertEquals(nProductsBefore, nProductsAfter); int storedMoneyAfter = this.dispenser.getStoredMoney(); assertEquals(storedMoneyBefore, storedMoneyAfter); } @Test public void testChangeProductPrice() { int storedMoneyBefore = this.dispenser.getStoredMoney(); int nProductsBefore = this.dispenser.getNumProducts(); int NewPrice = this.dispenser.ChangePrice(); // No caso de mudar o valor inicial dos produtos que é 40$ } @Test public void testChangenProducts() { int storedMoneyBefore = this.dispenser.getStoredMoney(); int nProductsBefore = this.dispenser.getNumProducts(); int NewnProducts = this.dispenser.ChangenProducts(); // No caso de mudar o valor inicial dos produtos na máquina que é 100 } @Test public void testnProductsQuery() { int storedMoneyBefore = this.dispenser.getStoredMoney(); int nProductsBefore = this.dispenser.getNumProducts(); int NewnProducts = this.dispenser.nProductsQuery(); // Não entedi o que faz??? } @Test public void testMoneyBoxQuery() { int storedMoneyBefore = this.dispenser.getStoredMoney(); int nProductsBefore = this.dispenser.getNumProducts(); int MoneyBox = this.dispenser.MoneyBoxQuery(); // Não entendi o que faz??? } @Test public void testChangeProductPriceToMOD10() { final int PROD_PRICE = 55; this.dispenser.changeProdPrice(PROD_PRICE); // <----------------------------- int prodPrice = this.dispenser.getProdPrice(); assertEquals(PROD_PRICE, prodPrice); // Não entendi o que faz??? // final int NEW_PROD_PRICE = 55; // int prodPriceBefore = this.dispenser.getProdPrice(); // this.dispenser.changeProdPrice(NEW_PROD_PRICE); // // <------------------------------ // int prodPriceAfter = this.dispenser.getProdPrice(); // assertEquals(prodPriceBefore, prodPriceAfter); } @Test public void testMultiplePurchase() { } @Test public void testSeparatedChange() { int array2[] = new int[] { 1, 0, 0 }; assertEquals(Arrays.equals(new int[] { 1, 1, 0 }, array2), true); // Não entendi o que faz??? // 1 de 50, 1 de 20.... // Comparar 2 arrays : Arrays.equals(new int [] {n[0], n[1], n[2]}, // array2, true); } }
d10s Posted March 25, 2012 at 05:01 PM Author Report #445591 Posted March 25, 2012 at 05:01 PM Classe Moneybox package pt.ipbeja.estig.p2; public class MoneyBox { private int price; private int currentMoney; // store user inserted money private int totalMoney; // sold products money public MoneyBox() { this(40); // chamar construtor com o price } public MoneyBox(int price) { this.price = price; this.currentMoney = 0; this.totalMoney = 0; } public int insertCoin(int value) { this.currentMoney = this.currentMoney += value; return this.currentMoney; } public int sellProduct() { int change = this.currentMoney - this.price; if (change >= 0) { this.currentMoney = 0; this.totalMoney += this.price; } return change; } public String getModel() { return this.getModel(); } public String getBrand() { return this.getBrand(); } public int getPrice() { return price; } public void changeProdPrice(int prodPrice) { // assert(false); assert (prodPrice % 10 == 0); // ou assim --> assert(prodPrice / 10.0 == (int)(prodPrice / 10.0)); this.price = prodPrice; } public int getStoredMoney() { return this.totalMoney; } public int cancel() { int res = this.currentMoney; this.currentMoney = 0; return res; } public int getProdPrice() { return this.price; } } * */ package pt.ipbeja.estig.p2; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; public class MoneyBoxTest { private MoneyBox coinBox; final static int PRODUCT_PRICE = 40; /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { this.coinBox = new MoneyBox(MoneyBoxTest.PRODUCT_PRICE); } /** * Test method for {@link pt.ipbeja.estig.p2.MoneyBox#MoneyBox(int)}. */ @Test public void testMoneyBoxInt() { int price = coinBox.getPrice(); assertEquals(MoneyBoxTest.PRODUCT_PRICE, price); } /** * Test method for {@link pt.ipbeja.estig.p2.MoneyBox#insertCoin(int)}. */ @Test public void testInsertCoin() { int value = this.coinBox.insertCoin(Dispenser.COIN50); assertEquals(Dispenser.COIN50, value); value = this.coinBox.insertCoin(Dispenser.COIN20); assertEquals(Dispenser.COIN50 + Dispenser.COIN20, value); } }
d10s Posted March 26, 2012 at 11:18 AM Author Report #445696 Posted March 26, 2012 at 11:18 AM fui muito exigente no que pedi? 😄
Gonka Posted March 26, 2012 at 11:32 AM Report #445698 Posted March 26, 2012 at 11:32 AM private Dispenser dispenser; isto devia ser básico, não? Estás a criar uma nova instância da classe Dispenser para a poderes usar na classe de testes. public int sellProduct() // não entendi este método { if (this.nProducts > 0) { int change = this.coinBox.sellProduct(); if (change >= 0) { this.nProducts--; return change; } } return this.cancel(); } Também está bem explícito. A variável nProducts tem a quantidade de produtos. Se for > 0, vai vender um produto. Se tiver dinheiro que chegue, vende o produto, e retira-o da variável nProducts. Na classe de testes, praticamente estás a usar a instância da classe Dispenser para chamar os métodos que definiste nessa mesma classe...
d10s Posted March 26, 2012 at 12:31 PM Author Report #445705 Posted March 26, 2012 at 12:31 PM entendi, bela explicação, não podem dizer o resto? :bored:
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now