如果某一个方法在单元测试中被beforeclass和afterclass标注,那么,如果该单元测试是给予junit框架的,那么两个方法必须声明为静态的方法,否则编译失败。但是如果是给予testng单元测试框架时,没有该限制。具体的实验可以参考下面的代码。
单例模式的实现类
package pattern.design;
public class Singleton {
//定义私有的构造函数
private Singleton(){
}
//定义一个私有的静态化的Singleton实例
private static Singleton singleton=null;
//定义一个公有化的getInstance方法
public static Singleton getInstance(){
if(null==singleton){
singleton=new Singleton();
}
return singleton;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//验证收否只生产了一个实例
Singleton single1=Singleton.getInstance();
Singleton single2=Singleton.getInstance();
System.out.println(single1==single2);
}
}
给予junit的单例模式的测试代码
package pattern.design;
import junit.framework.Assert;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
public class TestSingleton {
@BeforeClass
public static void beforeClass() {
System.out.println("beforeClass is executed");
}
@SuppressWarnings("deprecation")
@Test
public void testSingleton() {
System.out.println("testSingleton is executed");
Assert.assertEquals(Singleton.getInstance(), Singleton.getInstance());
Assert.assertEquals("Assert Object is equals", Singleton.getInstance(), Singleton.getInstance());
}
@AfterClass
public static void afterClass() {
System.out.println("afterClass is executed");
}
}
testng
package pattern.design;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.Assert;
import org.testng.annotations.Test;
public class TestSingletonWithTestNG {
@BeforeClass
public void beforeClass() {
System.out.println("beforeClass is executed");
}
@Test
public void testSingleton() {
System.out.println("testSingleton is executed");
Assert.assertEquals(Singleton.getInstance(), Singleton.getInstance());
Assert.assertSame(Singleton.getInstance(), Singleton.getInstance(),"Assert Object is equals");
}
@AfterClass
public void afterClass() {
System.out.println("afterClass is executed");
}
}