JUnit テストをプログラムで実行するのにかかる時間を記録したいと思います。さまざまなテスト クラスに多数のテストがあり、個々のテスト メソッドの実行にかかる時間を調べたいと考えています。
継承構造を変更したり、メソッドに別の方法で注釈を付けたりすることはできますが、テスト メソッド自体や、テスト ビジネス ロジックのセットアップに使用される before/after メソッド内にコードを追加する必要は避けたいと考えています。
JUnit テストをプログラムで実行するのにかかる時間を記録したいと思います。さまざまなテスト クラスに多数のテストがあり、個々のテスト メソッドの実行にかかる時間を調べたいと考えています。
継承構造を変更したり、メソッドに別の方法で注釈を付けたりすることはできますが、テスト メソッド自体や、テスト ビジネス ロジックのセットアップに使用される before/after メソッド内にコードを追加する必要は避けたいと考えています。
@Before と @After を使用してみてください。@Before または @After のアノテーションが付けられたメソッドは、テストの前または後に実行されます。
@Before
public void start() {
start = System.currentTimeMillis();
}
@After
public void end() {
System.out.println(System.currentTimeMillis() - start);
}
@Rule を作成して TestWatcher クラスをインスタンス化することもできます。これが私のために働いたものです。これは、TestCase を拡張するクラスで定義されています。
public class CompositeWithTeardownDBUnitTest extends DBTestCase {
DBTestCase は TestCase を拡張します
CompositeWithTeardownDBUnitTest のコード スニペット
@Rule
public TestRule watcher = new TestWatcher() {
protected void starting(Description description) {
timeStart = System.currentTimeMillis();
cal = Calendar.getInstance();
System.out
.println("===========================================================================");
System.out.println("Test: " + description.getMethodName());
System.out.println("Start Time: " + dateFormat.format(cal.getTime()));
System.out
.println("===========================================================================");
}
protected void finished(Description description) {
timeEnd = System.currentTimeMillis();
double seconds = (timeEnd-timeStart)/1000.0;
System.out
.println("\n===========================================================================");
System.out
.println("Test completed - ran in: "+new DecimalFormat("0.000").format(seconds)+" sec");
System.out
.println("===========================================================================\n");
}
};
JUnit テスト クラスは、このクラス CompositeWithTeardownDBUnitTest を拡張するだけです。
既存の回答に加えて、テスト名Before
とAfter
メソッドのルールを使用して、ログにメソッド名を表示できます。このような:
public class ImageSavingTest {
@Rule
public TestName name = new TestName();
private long start;
@Before
public void start() {
start = System.currentTimeMillis();
}
@After
public void end() {
System.out.println("Test " + name.getMethodName() + " took " + (System.currentTimeMillis() - start) + " ms");
}
@Test
public void foobar() {
// test code here
}
}
出力します:
foobar のテストに 1828 ミリ秒かかりました
前後の呼び出し間の時間を記録するJUnit ルールを作成できます。このルールは、インスタンスおよび/またはクラス ルールとして使用して、個々のテスト メソッドおよび各テスト クラスの時間を取得できます。
@Before および @After アノテーションを使用し、junit テストケースの開始時刻と終了時刻に注意する場合。次に、2 つのタイムスタンプの差を見つけると、テストケースの実行時間が得られます。このようなもの:
public class Example {
long startTime;
long endTime;
@Before public void recordStartTime() {
startTime = System.currentTimeMillis();
}
@Test public void testSomething() {
//test method
}
@After public void recordEndAndExecutionTime() {
endTime = System.currentTimeMillis();
System.out.println("Last testcase exection time in millisecond : " + (endTime - startTime));
}
}