# ARMTEST Funzionalità per il run di test su progetti Armundia. ## Basic usage Dipendenza da utilizzare: ```xml com.armundia.tech armtest 1.0.2 ``` Utilizzo per una classe di test (con o senza `@Testable`) e metodi `@Test`: ```java class MioPrimoTest extends ArmUnitTest { @Inject private CdiTestService service; @Test void test01_base() { String info = service.readInfo(); assertNotNull(info, "info must be not null"); } } ``` da notare l'uso di una classe base `ArmUnitTest` per i test. Questo permetterà di avere: * supporto completo CDI (auto discovery anche su più jar dei bean) * unico limite: i bean devono essere esplicitamente indicati con un'annotazione `@Dependent`, `@RequestScoped`, `@SessionScoped` o `@ApplicationScoped` * supporto `@PersistenceContext` (normalmente disponibile solo in contesto Enterprise) ## supporto scenari DB via file H2 ```java @Scenario(name = "one", order = 1) class ScenarioOne extends ArmUnitTest { @Inject private OneService service; @Test void test01_query() { List dom = service.getApDom("CMA_ASSET_CLASS_INFO"); assertTrue(!dom.isEmpty(), "dominio CMA_ASSET_CLASS_INFO vuoto/non trovato"); } } ``` Dove il servizio `OneService` è, ad esempio, con accesso al db tramite `EntityManager`: ```java @Dependent public class OneService { @PersistenceContext private EntityManager em; public List getApDom(String cod) { TypedQuery query = em.createQuery("SELECT a FROM ApDom a WHERE a.id.codCampo = :cod", ApDom.class); query.setParameter("cod", cod); return query.getResultList(); } } ``` userà il database per lo scenario **`one`** che corrisponde al database, H2, in: `resources\META-INF\scenarios` `one.mv.db` a cui corrisponde il file: `one.trace.db` Oltre questa modalità con i file `.db`, è supportato il recupero di tali file da un file `.zip` (per ridurre lo spazio utilizzato). Altre modalità supportate: **script aggiuntivo** a partire da un database esistente: ```java @Scenario(name = "one", scripts = "META-INF/scenarios/add-datas.sql") ``` **script db completo** a partire da un database vuoto (in memoria): ```java @Scenario(name = "one", asResource=false, scripts = "META-INF/scenarios/from-scratch.sql") ``` **script db multipli** a partire da un database vuoto in memoria (base non esiste come risorsa): ```java @Scenario(name = "base", scripts = "META-INF/scenarios/from-scratch.sql,META-INF/scenarios/more.sql") ``` ## Auto test per tutti i Pojo di un package (!) ```java List errors = ArmTest.instance().testPojosInPackage("com.armundia.armtest.testpojo"); // eventualmente aggiungere un controllo, ma già la riga precedente // aumenta la coverage richiamando tanti get/set assertEquals(0, errors.size(), "expected no errors"); ``` Oppure: ````java List errors = ArmTest.instance().testPojos( null, // nessuna annotation in particolare "com.armundia.armtest.testpojo", "com.armundia.armtest.testpojo"); // eventualmente aggiungere un controllo, ma già la riga precedente // aumenta la coverage richiamando tanti get/set assertEquals(0, errors.size(), "expected no errors"); ```` ## MAVEN run test commands da bash shell: ```bash mvn test ``` con report coverage: ```bash mvn test jacoco:report ``` ## Future features * verifica supporto Rest JAX-RS ## Release commands Follow the steps to release a maven package into Nexus Repository Assure that the `pom.xml` has the `` tag that points to the git developer connection and manage takes the HEAD commit of your repository. ```xml scm:git:{git-http-connection} HEAD ``` `mvn release:clean` `mvn release:prepare` After, if it goes all well, **push** the commits and the tag created by the execution and run: `mvn release:perform` If something about `mvn release:perform` goes wrong and we want to revert all the `release` stuff, we need to remove the commit and tag created by the execution and run: `mvn release:rollback` ## Release Qui sono indicate le release finora effettuate. ### Next Release #### 1.0.2 Major release con: * supporto CDI/Junit 5 * supporto scenari di test db, basati su h2 #### 0.0.1 * Released the package... TODO