2014-01-30 2 views
1

Я думал, что это будет тривиальное дело, но я не могу найти способ, похожий на class_exists в Java. Я пишу тест, чтобы проверить, определено ли имя класса. Как я могу воспроизвести это на Java с помощью jUnit?Java: Verify Class Exists

<?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-something-in-package –

+0

Я думаю, что я мог бы использовать '' 'getClass''' @HugoSousa – theGrayFox

+0

Возможная причина, по которой этот код может показаться неудачным (хотя он и должен работать) заключается в том, что classForName требуется * полное * пакетное имя класса. –

ответ

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 (« Автомобиль »);' '', но этот тест все еще терпит неудачу и не находит класс. – theGrayFox

+0

'Class.forName (« Автомобиль »)' должен работать нормально. Можете ли вы отредактировать исходный пост (или еще лучше - открыть новый вопрос) с полным определением stacktrace и класса? – Mureinik