Project 5 CC
Project5-Instructions.docx
Project 5
Unit Testing
Mission:
You were asked by your manager to execute complete unit test (white box testing) for StringUtils Java class, written by a developer who suddenly left the team. You are provided the source code (StringUtils.java) and you are to write JUnit test cases for it. You are to assume that code description is correct for what each method is supposed to do and the code is supposed to match it.
Objectives:
Define, implement, and execute complete and thorough unit test on the given Java class (StringUtils.java).
Outline of Steps:
1. Fill out the Unit Test approach section in the template, explaining what unit test is all about and it’s most important criteria. Address all the questions completely and thoroughly.
2. Design tests for each method to meet 100% code coverage and reasonable data coverage. Describe these tests in the document using template format given. For this project you want to test methods against the code comments and the code itself. The code comments are assumed to be correct and the code may or may not be correct. Your goal is for your testcases to find defects in the code
3. Implement unit test cases in JUnit (e.g. StringUtilsTest.java)
4. Run the unit test cases and document the actual results in the report for each test case
5. Identify any defects you found running the JUnit and describe them in the report (using the template format) in section 2. Note: You should find a few defects.
6. Submit both the report file and JUnit source code (java file).
7. All your tests must be in a single java file
Again, you should first identify and document in your report all the unit tests that should be created (using the example in report). That will give you partial credit – identifying the tests. Then you should implement those test cases in JUnit. Lastly you should run the test cases and document the actual results and defects you found.
Resources:
Proj5-MSIT660-GradingCriteria.doc – lists the grading criteria
Week 12-13 lecture charts – has unit test examples
ListNode.java and TestListNode.java – example Java class and its unit tests
Simple.java and testSimple.java - used in Discussions as examples of a class and JUnit tests for it.
List of assert methods that can be used in tests: http://junit.sourceforge.net/javadoc/org/junit/Assert.html
Deliverables:
Use the Report template (Pro5-ReportTemplate.doc) in Blackboard under Course Content->Projects->Project5 folder. The report must be submitted as an MS Word .doc. The name of the MS Word Report file shall be your_name_MSIT660_P6.doc. You must submit a separate file with your tests’ source code.
Notes on pulling source code into eclipse
1. Create a new Java project: File->New->Java Project (ex. MyProject5)
2. Click on “src” under your new project; right click and select import
3. Click on General->File System, then next and browse for where you have the file UTStringUtil.java, select it and click Finish
4. As an alternative you could create a new class StringUtils and copy/paste the file content into it.
5. In your project, you will see the source file StringUtils.java under src directory.
To add JUnit library to your Eclipse project:
1. Right click on project and select Properties
2. Click on Java Build Path (left side list)
3. Click on “Add Library” button (right side)
4. Select JUnit and click next
5. Choose version 4 of Junit and click Finish
6. The JUnit library will now show under Libraries tab.
7. Click OK
image1.png
StringUtils.java
StringUtils.java
import
java
.
security
.
InvalidParameterException
;
/*
* Small class to practice writing JUnit tests
* Author: Renata Rand McFadden
* January 2016
*/
public
class
StringUtils
{
// attributes
private
String
myStr
;
// constructor
// assigns parameter value to myStr attribute
// throws NullPointerException if parameter is null or empty string
public
StringUtils
(
String
s
)
{
if
(
s
==
null
||
s
.
equals
(
""
))
{
throw
new
InvalidParameterException
(
"Parameter cannot be null or empty"
);
}
myStr
=
s
;
// assign value of parameter to attribute
}
// constructor
// assigns parameter value to myStr attribute
// upper cases if parameter is true otherwise lower cases
// throws NullPointerException is parameter is null or empty string
public
StringUtils
(
String
s
,
boolean
upper
)
{
if
(
s
==
null
)
{
throw
new
NullPointerException
(
"Parameter cannot be null"
);
}
if
(
upper
)
myStr
=
s
.
toUpperCase
();
else
myStr
=
s
.
toLowerCase
();
}
// returns current value of myStr attribute
public
String
getMyStr
()
{
return
myStr
;
}
// returns true if myStr ends with character passed in parameter
// otherwise returns false
public
boolean
endsWithChar
(
char
ch
)
{
int
last
=
myStr
.
length
()
-
1
;
if
(
myStr
.
charAt
(
last
)
==
ch
)
return
true
;
return
false
;
}
// converts myStr attribute to all upper case and returns result
public
String
convertToUpperCase
()
{
String
newStr
=
""
;
for
(
int
i
=
1
;
i
<
myStr
.
length
();
i
++
)
{
char
ch
=
myStr
.
charAt
(
i
);
newStr
=
newStr
+
Character
.
toUpperCase
(
ch
);
}
return
newStr
;
}
// returns character at index
// throws IndexOutOfBoundsException exception for out of bounds values
public
char
returnCharAt
(
int
index
)
{
if
(
index
<
0
||
index
>
myStr
.
length
())
{
throw
new
NullPointerException
(
"Index cannot be outsize of 0 and size of string"
);
}
return
myStr
.
charAt
(
index
);
}
// adds string in parameter to end of myStr
// returns new value and updates myStr
// throws InvalidParameterException if value is empty string or null
public
String
updateToConcat
(
String
value
)
{
if
(
value
.
equals
(
""
))
{
throw
new
NullPointerException
(
"Parameter cannot be empty string"
);
}
myStr
=
myStr
.
concat
(
value
);
return
myStr
;
}
}