Source: "Agile Software Development: Principles, Patterns, and Practices"
by Robert C. Martin. Available at www.objectmentor.com/PPP.
public class Singleton
{
private static Singleton theInstance = null;
private Singleton() {}
public static Singleton Instance()
{
if (theInstance == null)
theInstance = new Singleton();
return theInstance;
}
}
import junit.framework.*;
import java.lang.reflect.Constructor;
public class TestSimpleSingleton extends TestCase
{
public TestSimpleSingleton(String name)
{
super(name);
}
public void testCreateSingleton()
{
Singleton s = Singleton.Instance();
Singleton s2 = Singleton.Instance();
assertSame(s, s2);
}
public void testNoPublicConstructors() throws Exception
{
Class singleton = Class.forName("Singleton");
Constructor[] constructors = singleton.getConstructors();
assertEquals("Singleton has public constructors.", 0, constructors.length);
}
}
Monostate:
public class Monostate
{
private static int itsX = 0;
public Monostate() {}
public void setX(int x)
{
itsX = x;
}
public int getX()
{
return itsX;
}
}
import junit.framework.*;
public class TestMonostate extends TestCase
{
public TestMonostate(String name)
{
super(name);
}
public void testInstance()
{
Monostate m = new Monostate();
for (int x = 0; x<10; x++)
{
m.setX(x);
assertEquals(x, m.getX());
}
}
public void testInstancesBehaveAsOne()
{
Monostate m1 = new Monostate();
Monostate m2 = new Monostate();
for (int x = 0; x<10; x++)
{
m1.setX(x);
assertEquals(x, m2.getX());
}
}
}
This is an example from CSci 3601 course.