2、テストキットと自動化テスト

4693 ワード

1、ディレクトリ削除のテスト
ディレクトリ削除クラス
import java.io.File;

public class DeleteAll
{
	public static void deleteAll(File file)
	{
		if(file.isFile() || file.list().length == 0)
		{
			file.delete();
		}
		else
		{
			File[] files = file.listFiles();
			for(File f : files)
			{
				deleteAll(f);
				f.delete();
			}
		}
	}
}

テストクラス:
import java.io.File;

import junit.framework.Assert;
import junit.framework.TestCase;

public class DeleteAllTest extends TestCase
{
	public void testDeleteAll()
	{
		File file = null;
		try
		{
			file = new File("test.txt");
			file.createNewFile();
			DeleteAll.deleteAll(file);
		}
		catch(Exception e)
		{
			
		}
		boolean isExist = file.exists();
		Assert.assertEquals(false, isExist);
		//Assert.assertFalse(isExist);
	}
	/**
	 *  , 
	 *     d
	 *     /\
	 *    /  \
	 *   d1   d2
	 *  /  \
	 * s1   s2
	 * 
	 */
	public void testDeleteAll2()
	{
		File directory = null;
		try
		{
			directory = new File("dir");
			directory.mkdir();
			File file1 = new File(directory,"file1.txt");
			File file2 = new File(directory,"file2.txt");
			file1.createNewFile();
			file2.createNewFile();
			File d1 = new File(directory,"d1");
			File d2 = new File(directory,"d2");
			d1.mkdir();
			d2.mkdir();
			File subFile1 = new File(d1,"subtest1.txt");
			File subFile2 = new File(d2,"subtest2.txt");
			subFile1.createNewFile();
			subFile2.createNewFile();
			
			DeleteAll.deleteAll(directory);
		}
		catch(Exception e)
		{
			Assert.fail();
		}
		Assert.assertNotNull(directory);
		String[] names = directory.list();
		Assert.assertEquals(0, names.length);
		directory.delete();
	}
}

2、私有方法のテスト
public class Calculator2
{
	private int add(int a,int b)
	{
		return a + b;
	}
}


import java.lang.reflect.Method;

import junit.framework.Assert;
import junit.framework.TestCase;

public class Calculator2Test extends TestCase
{
	public void testAdd()
	{
		try
		{
			Calculator2 cal2 = new Calculator2();
			Class<Calculator2> clazz = Calculator2.class;
			Method method = clazz.getDeclaredMethod("add",new Class[] {Integer.TYPE,Integer.TYPE});
			method.setAccessible(true);
			Object result = method.invoke(cal2, new Object[]{2,3});
			Assert.assertEquals(5, result);
		}
		catch(Exception e)
		{
			Assert.fail();
		}
	}
}


プライベートメソッドのテストは反射機構を用いて行った.
クラスのプライベートメソッドをテストする場合は、2つの方法があります.1つは、メソッドの修飾子を変更し、privateをdefaultまたはpublicに変更することです(ただし、この方法は推奨されません).2つ目は、テストクラスでターゲットクラスを呼び出すために反射を使用するプライベートメソッドです(この方法を推奨します).
3、MyEclipseのJunit Test Caseを使って自動的にテストクラスを生成する
New Java Classアイコンの下にJunit Test Caseアイテムがあります.これを使用すると、次のステップでテストクラスを自動的に生成するプロンプトが表示されます.
4、TestSuite(テストキット):複数のテストを組み合わせて、同時に複数のテストを実行し、テストの自動化を実現することができる.
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

public class TestAll extends TestCase
{
	public static Test suite()
	{
		TestSuite suite = new TestSuite();
		
		suite.addTestSuite(CalculatorTest.class);
		suite.addTestSuite(LargestTest.class);
		suite.addTestSuite(DeleteAllTest.class);
		
		return suite;
	}
}

RepeatedTestを使用して、指定したクラスを繰り返しテストする方法です.具体的には、Stringタイプのパラメータを持つコンストラクション関数をテストクラスに追加し、RepeatedTestを使用するときにテストの方法を指定します.
import junit.extensions.RepeatedTest;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

public class TestAll extends TestCase
{
	public static Test suite()
	{
		TestSuite suite = new TestSuite();
		
		suite.addTestSuite(CalculatorTest.class);
		suite.addTestSuite(LargestTest.class);
		suite.addTestSuite(DeleteAllTest.class);
		
		suite.addTest(new RepeatedTest(new CalculatorTest("testSubtract"),20));
		return suite;
	}
}