Stap 1. Voorzie de project configuratie om een test databank te voorzien. Hierbij zal je de onderstaande dependencies nodig hebben in de pom.
<!-- In memory Database for testing-->
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.4.0</version>
<scope>test</scope>
</dependency>
<!-- Load SQL files -->
<dependency>
<groupId>org.apache.ibatis</groupId>
<artifactId>ibatis-core</artifactId>
<version>3.0</version>
<scope>test</scope>
</dependency>
Stap 2. Voorzie een test klasse die de configuratie in een @BeforEach methode voor zijn rekening neemt. Deze methode zal de databank vullen aan de hand van de ibatis afhankelijkheid. Je zal dus ook de data.sql en de schema.sql bestanden moeten plaatsen in de src > test > resources map.
Gebruik hier ook de buffered readers zoals in het voorbeeld.
@BeforeEach
public void init() throws SQLException, Exception {
try (
Connection connect = DriverManager.getConnection(
"jdbc:hsqldb:mem:mymemdb",
"sa",
""
);
Statement statement = connect.createStatement();
Reader schemaReader = new BufferedReader(new FileReader("src/test/resources/schema.sql"));
Reader datareader = new BufferedReader(new FileReader("src/test/resources/data.sql"));
) {
ScriptRunner runner = new ScriptRunner(connect);
runner.runScript(schemaReader);
runner.runScript(datareader);
}
}
Nog even de sql bestanden
data.sql
truncate table Brewers;
truncate table Categories;
truncate table Beers;
INSERT INTO Brewers VALUES (1,'TestBrewer','Test Street 911',1111,'Test-County',10000);
INSERT INTO Categories VALUES (1,'TestCategory');
INSERT INTO Beers VALUES (1,'TestBeer',1,1,2.75,100,7,0,NULL);
schema.sql
CREATE TABLE if not exists Brewers (Id int IDENTITY not null, Name varchar(50) default NULL, Address varchar(50) default NULL, ZipCode varchar(6) default NULL,City varchar(50) default NULL, Turnover int default 0, PRIMARY KEY (Id));
CREATE TABLE Categories (Id int IDENTITY not null, Category varchar(50) default NULL,PRIMARY KEY (Id));
CREATE TABLE Beers (Id int IDENTITY not null, Name varchar(100) DEFAULT NULL, BrewerId int DEFAULT NULL, CategoryId int DEFAULT NULL,Price float DEFAULT 0, Stock int DEFAULT 0, Alcohol float DEFAULT 0, Version int DEFAULT 0, Image blob, PRIMARY KEY (Id));
Stap 3. Schrijf een falende unit test voor een statische methode die een connectie object aanneemt en een id voor de databank. Deze zal een String terug geven met de naam van het bier. Kijk of de biernaam ook correct wordt weergegeven.
Stap 4. Schrijf een falende unit test die nagaat of de foutmelding omhoog komt als een bierId niet gevonden is.
Stap 5. Schrijf een statische methode die de twee testen doet slagen.
Een oplossing voor deze code kan gevonden worden op onze GiHub Repository me de Tag Assignment3.