Software testing is a powerful tool when creating all types of applications. That’s why it is also so important to test it in details so that a chance of an unexpected fail is minimal. We say it so: all code you write must be tested with minimum 2 types of tests: positive and negative. A positive test is a test that verifies a correct functionality, a negative test verifies that a function will fail or throw an exception. Let’s see how it works.
Suppose we have a class Apple with Color as a parameter (red and green apples er allowed).
public class Apple { private String color; boolean isGreenOrRedColor() { if(color.equalsIgnoreCase("green") || color.equalsIgnoreCase("red")) return true; return false; } public void setColor(String color) { this.color = color; } }
In this case we need to test both a class and a method isGreenOrRedColor(). We create a class to test our Apple class and give it a name “AppleTest.java”. In order to begin using JUnit-tool we import org.junit.Test. In this example we create two tests for our class: green (positive) and blue (negative) apples.
A positive test verifies a correct answer:
@Test public void testThatGreenIsCorrectColor() { Apple apple = new Apple(); //test instantiation of the class apple.setColor("grEeN"); assertTrue(apple.isGreenOrRedColor()); //we expect that it returns TRUE }
Annotation @Test gives JUnit a sign that there is a job to do.
Next we write a negative test where we send a fail color to the class and expect that it returns FALSE:
@Test public void testThatBlueIsNotSupportedColor() { Apple apple = new Apple(); //test instantiation of the class apple.setColor("blue"); assertFalse(apple.isGreenOrRedColor()); //we expect that it returns FALSE }
What is also very important is that often we need access to the testing method in order to test it from another class. It is a bad practice to give such methods public access only in order to test it. If a method can be private you can give it default/package access or test it from another one with a public access.
To run the tests in Eclipse you choose: Run as -> JUnit test
Complete test class for this example.
import org.junit.Test; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertFalse; class AppleTest { @Test public void testThatGreenIsCorrectColor() { Apple apple = new Apple(); //test instantiation of the class apple.setColor("grEeN"); assertTrue(apple.isGreenOrRedColor()); //we expect that it returns TRUE } @Test public void testThatBlueIsNotSupportedColor() { Apple apple = new Apple(); //test instantiation of the class apple.setColor("blue"); assertFalse(apple.isGreenOrRedColor()); //we expect that it returns FALSE } }
See Also
- Java conversions and 7 Golden rules of widening, boxing & varargs
- Java
- Simple Light
- Java regex by example: strings
- Java Basic Programs: 5 Simple Examples