189 lines
4.3 KiB
Markdown
189 lines
4.3 KiB
Markdown
# ARMTEST
|
|
|
|
Funzionalità per il run di test su progetti Armundia.
|
|
|
|
## Basic usage
|
|
|
|
Dipendenza da utilizzare:
|
|
|
|
```xml
|
|
<dependency>
|
|
<groupId>com.armundia.tech</groupId>
|
|
<artifactId>armtest</artifactId>
|
|
<version>1.0.2</version>
|
|
</dependency>
|
|
```
|
|
|
|
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<ApDom> 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<ApDom> getApDom(String cod) {
|
|
TypedQuery<ApDom> 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<String> 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<String> 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 `<scm>` tag that points to the git developer connection and manage takes the HEAD commit of your repository.
|
|
|
|
```xml
|
|
<scm>
|
|
<developerConnection>scm:git:{git-http-connection}</developerConnection>
|
|
<tag>HEAD</tag>
|
|
</scm>
|
|
```
|
|
|
|
`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
|