2014-01-30 20 views
1

我認爲這將是一件微不足道的事情,但我似乎無法找到類似於在Java中class_exists的方法。我正在編寫一個測試來驗證是否定義了一個類名。我如何使用jUnit在Java中複製它?Java:驗證類存在

<?php 

$this->assertTrue(class_exists('Car'), 'Should have a class called "Car"'); 

TestCar.java

import org.junit.Assert; 

import org.junit.Test; 

public class TestCar { 

    @Test 
    public void testCarExists() { 
      try { 
       Class.forName("Car"); 
      } catch(ClassNotFoundException e) { 
       Assert.fail("Should create a class called 'Car'."); 
      } 
    } 
} 

Car.java

public class Car { 
    // just enough :-) 
} 
+0

看看這有助於:http://stackoverflow.com/questions/5794227/how-to-check- if-class-exists-in-in-package –

+0

我在想我可以使用'''getClass''' @HoNoSousa – theGrayFox

+0

上述代碼可能看起來失敗(儘管它應該工作)的一個可能的原因是,classForName需要該類的* entire *包限定名。 –

回答

3

一個利用Java的是,你有一個編譯,所以通常這是一個非-問題。如果您正確地編譯代碼,然後出於某種原因從運行時環境中刪除所需的jar文件,則會得到java.lang.ClassNotFoundException,所以這應該足夠了。

如果你想成爲超級額外的安全,你可以嘗試調用Class.forName

@Test 
public void testClassExists { 
    try { 
     Class.forName("org.mypackage.Car"); 
    } catch (ClassNotFoundException e) { 
     Assert.fail("should have a class called Car"); 
    } 
} 
+0

這給了我一個足夠的想法來實現類似的東西。我感謝幫助! – theGrayFox

+0

快速的問題,如果我的類是在默認包中指定的,文件路徑是什麼?我一直試圖弄清楚這一點現在。我已經指定了'''Class.forName(「Car」);'''但是這個測試仍然失敗,沒有找到類。 – theGrayFox

+0

'Class.forName(「Car」)'應該工作得很好。你可以使用完整的堆棧跟蹤和類定義來編輯你的原始文章(或者更好的 - 打開一個新的問題)嗎? – Mureinik