Ant: sestavování softwaru
- u většího programu je potřeba udělat více než
javac JedenSouborSeZdrojakem.java
- takže existují speciální programy, kde popíšeme, co všechno se má stát...
- ... a vše spustíme jedním příkazem
- příkladem je Apache Ant
- ověřte, že jej máte nainstalovaný a dokážete jej spustit
Příklad
- měli byste mít přístup do projektu
polynomial-vase-jmeno
- naklonujte si ho na váš lokální disk
- jde o upravený příklad na mnohočleny
- celý projekt jde naimportovat do Eclipse (File -> Import)
- otevřete si soubor
src/main/cz/alej/prog1/polynomial/Polynomial.java
- třída pro práci s mnohočleny
- bez implementace
- všimněte si nastavení balíčku
- otevřete si soubor
src/test/cz/alej/prog1/polynomial/PolynomialBaseTest.java
- tady jsou automatické testy pro třídu
Polynomial
- obě třídy (
Polynomial
i PolynomialBaseTest
) jsou ve stejném balíčku
- takže není potřeba
import
- ale jsou v různých adresářích, abychom oddělili program a testy
- některé testy jsou triviální (např.
getCoefficientQuadratic
)
- ale zajistí, že na nějakou metodu nezapomeneme
- i jednoduché testy odhalí spousty chyb ;-)
- testy
toPrettyString*
de-facto určí očekávaný výstup metody
- z kořenového adresáře spusťte
ant
$ ant
Buildfile: .../build.xml
compile:
[mkdir] Created dir: .../out/classes
[javac] Compiling 2 source files to .../out/classes
jar:
[jar] Building jar: .../out/polynomial.jar
main:
BUILD SUCCESSFUL
Total time: 0 seconds
- podívejte se do adresáře
out/classes
- měly by tam být
*.class
soubory
- právě jsme je zkompilovali
- spusťte
ant test
$ ant test
Buildfile: .../build.xml
compile:
compile-test:
[mkdir] Created dir: .../out/test-classes
[javac] Compiling 3 source files to .../out/test-classes
test:
[mkdir] Created dir: .../out/test-results
[junit] Running cz.alej.prog1.polynomial.PolynomialBaseTest
[junit] Tests run: 15, Failures: 10, Errors: 0, Skipped: 0, Time elapsed: 0,164 sec
[junit] Output:
[junit] Creating polynomial 7 * x^0 + 8 * x^1 + 9 * x^2 ...
[junit] Creating polynomial 7 * x^0 + 8 * x^1 + 9 * x^2 ...
[junit] Creating polynomial 0 * x^0 ...
[junit] Creating polynomial 42 * x^0 ...
[junit] Creating polynomial 42 * x^0 ...
[junit] Creating polynomial 7 * x^0 + 8 * x^1 + 9 * x^2 ...
[junit] Creating polynomial 7 * x^0 + 8 * x^1 + 9 * x^2 + 10 * x^3 ...
[junit] Creating polynomial ...
[junit] Creating polynomial 7 * x^0 + 8 * x^1 + 9 * x^2 ...
[junit] Creating polynomial 1 * x^0 + 2 * x^1 + 1 * x^2 ...
[junit] Creating polynomial -3 * x^0 + 5 * x^1 + 0 * x^2 ...
[junit] Creating polynomial 7 * x^0 + 8 * x^1 + 9 * x^2 ...
[junit] Creating polynomial 17 * x^0 + 0 * x^1 + -2 * x^2 + -5 * x^3 ...
[junit] Creating polynomial 3 * x^0 + 0 * x^1 + 5 * x^2 ...
[junit] Creating polynomial 0 * x^0 + 0 * x^1 + 0 * x^2 ...
[junit]
[junit] Test cz.alej.prog1.polynomial.PolynomialBaseTest FAILED
[junit] Running cz.alej.prog1.polynomial.PolynomialProductTest
[junit] Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0,14 sec
[junit] Running cz.alej.prog1.polynomial.PolynomialSumTest
[junit] Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0,145 sec
[junitreport] Processing .../out/test-results/TESTS-TestSuites.xml to /tmp/null1223240972
[junitreport] Loading stylesheet jar:file:/usr/share/ant/lib/ant-junit.jar!/org/apache/tools/ant/taskdefs/optional/junit/xsl/junit-frames.xsl
[junitreport] Transform time: 632ms
[junitreport] Deleting: /tmp/null1223240972
[echo] Open .../out/test-results/html/index.html to see results in the browser.
BUILD FAILED
.../build.xml:88: JUnit test(s) failed.
Total time: 3 seconds
- spustili jsme testy a v souboru
out/test-results/html/index.html
jsou jejich výsledky
Úloha
- vyzkoušejte si výše uvedené kroky
- začněte pracovat na implementaci třídy
Polynomial
- využijte již existující kód
- zatím můžete ignorovat metody
sum
a product
- následující kus kódu by vám mohl pomoci s vytvořením metody
toString
a toPrettyString
StringBuilder result = new StringBuilder("Polynomial[");
for (int deg = 0; deg <= getDegree(); deg++) {
if (deg > 0) {
result.append(",");
}
result.append(getCoefficient(deg));
}
result.append("]");
return result.toString();