Transcript ppt

Unit Testing
and SQL
Shane Cantrell
Zach Crisman
1
Resources

JUnit
– http://www.junit.org/index.htm
– http://sourceforge.net/projects/junit
– http://junit.sourceforge.net/doc/testinfected/testin
g.htm

SQL
– http://www.w3schools.com/sql/default.asp
– http://shane.hydrus.net/cse403/MyDatabase.zip
2
Why Test?




Gets you to think about possible modes of
failure
Allows you to easily verify that nothing has
been inadvertently broken
If something breaks, then you know right
away (assuming it was covered in a test)
Allows test code to be conveniently
packaged for continued use
3
JUnit: Planning
Initialize test variables
 Run the test
 Create the solution using a direct
method
 Compare the results


Classes should be designed with unit
testing in mind!
4
JUnit: Basic Steps

Extend class TestCase
– Keep it in the same package as the classes to
be tested, so that it can access package private
methods


Create public functions to test each case
Create the “public static Test suite()”
function, which returns a suite containing
your test functions
5
JUnit: Example
Skeleton
public class MyTest extends TestCase {
protected void setUp() { ... }
protected void tearDown() { ... }
public static Test suite() { ... }
}
6
JUnit: Example suite()
public class MoneyTest extends TestCase {
...
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(new MoneyTest(“testEquals”));
suite.addTest(new MoneyTest(“testSimpleAdd”));
return suite;
}
}
7
JUnit: Class Assert
assertEqual(expected, actual)
 assertTrue(boolean)
 assertFalse(boolean)
 assertNull(object)
 assertNotNull(object)
 assertSame(expected, actual)
 assertNotSame(expected, actual)

8
JUnit: Example Class
public class MathTest extends TestCase {
protected double fValue1;
protected double fValue2;
protected void setUp() {
fValue1 = 2.0;
fValue2 = 3.0;
}
public void testAdd() {
double result = fValue1 + fValue2;
assertTrue(result == 5.0);
}
...
}
9
JUnit: Running Tests


java junit.textui.TestRunner junit.samples.AllTests
java junit.swingui.TestRunner junit.samples.AllTests
10
SQL: What is it?

SQL (Structured Query Language)
– ANSI language for interfacing databases
– Uses very simple text commands

SQL Databases
– Organization is similar to a bunch of linked
spreadsheets called “tables”
– Store text, numbers, etc.
– Most have their own proprietary extensions
11
SQL: Tables

Creating
– CREATE TABLE tableName ( columnName1 type,
columnName2 type, ... )
– Ex: CREATE TABLE objects ( objID int, name varchar(80) )

Deleting
– DROP TABLE tableName
– Ex: DROP TABLE objects
12
SQL: Inserting Data

Insert a Row
– INSERT INTO tableName ( columnName1, ..., columnNameN ) VALUES
( value1, ..., valueN )
– Ex: INSERT INTO objects ( objID, name ) VALUES ( 0, ‘void’ )

Update a Cell
– UPDATE tableName SET columnName1 = value1, ..., columnNameN =
valueN WHERE criteria
– Ex: UPDATE objects SET name = ‘apple’ WHERE objID = 0

Delete a Row
– DELETE FROM tableName WHERE criteria
– Ex: DELETE FROM objects WHERE objID = 0
13
SQL: Finding Data

Basic Usage
– SELECT columnName1, ..., columnNameN FROM tableName
– Ex: SELECT objID, name FROM objects

Specifiers
– WHERE (criteria for selecting rows)




WHERE criteria
WHERE columnName = value
WHERE columnName > value AND criteria
WHERE columnName LIKE value
– GROUP BY (criteria for grouping rows)
– ORDER BY (criteria for ordering rows)


ORDER BY columnName1, ..., columnNameN
ORDER BY columnName1 ASC, ..., columnNameN DESC
– INNER JOIN (merge rows from multiple tables)
14
SQL: What You Need

SQL Driver
– org.postgresql.Driver

URL
– jdbc:postgresql://cubist.cs.washington.edu/shanec
Username
 Password
 Restart Tomcat to get an updated Java
classpath

15
JDBC and SQL

package java.sql.*
– DriverManager
– Connection
– Statement
– ResultSet
– ResultSetMetaData
– SQLException

java.lang.Class
16
Loading the Driver






Class.forName(JDBC_DRIVER);
Connection connection =
DriverManager.getConnection(DATABASE_URL,
DATABASE_USERNAME, DATABASE_PASSWORD);
JDBC_DRIVER = “org.postgresql.Driver”
DATABASE_URL =
“jdbc:postgresql://cubist.cs.washington.edu/shanec”
DATABASE_USERNAME = “shanec”
DATABASE_PASSWORD = “pwd”
17
Sending Commands




Statement statement;
statement = connection.createStatement();
statement.execute(“ ... ”);
ResultSet resultSet = statement.executeQuery(“ ... ”);
18
Important Points

ResultSet
– Only one per statement object
– Close automatically with closure of
statement or new statement method call
– Must advance to the first row before
accessing data
– Column indices start with one
19
Other: POSTing Files
http://snowwhite.it.brighton.ac.uk/~mas/mas/courses/html/html.html
<FORM ENCTYPE="multipart/form-data“
ACTION="URL“
METHOD=POST>
Send file name:<BR>
<INPUT NAME="message“
TYPE="file"> <BR> <BR>
<INPUT TYPE="submit“
VALUE="Send file to server">
</FORM>
20
Reminder

Unit Testing
Logging (java.util.logging)

Jakarta Libraries

CVS
E-Mail Lists
Bug Tracking



21
Next Week

Discussion on testing and debugging!
– Think about what Ian King has to say.
– Do you agree or disagree?
– How does your testing compare?
– Do you have testing stories from your
past?
22