Java-версия алгоритма Хаверсина, основанная на ответе Романа Макарова на эту тему
public class HaversineAlgorithm {
static final double _eQuatorialEarthRadius = 6378.1370D;
static final double _d2r = (Math.PI / 180D);
public static int HaversineInM(double lat1, double long1, double lat2, double long2) {
return (int) (1000D * HaversineInKM(lat1, long1, lat2, long2));
}
public static double HaversineInKM(double lat1, double long1, double lat2, double long2) {
double dlong = (long2 - long1) * _d2r;
double dlat = (lat2 - lat1) * _d2r;
double a = Math.pow(Math.sin(dlat / 2D), 2D) + Math.cos(lat1 * _d2r) * Math.cos(lat2 * _d2r)
* Math.pow(Math.sin(dlong / 2D), 2D);
double c = 2D * Math.atan2(Math.sqrt(a), Math.sqrt(1D - a));
double d = _eQuatorialEarthRadius * c;
return d;
}
}
Код, отмеченный @Before
, выполняется перед каждым тестом, а @BeforeClass
запускается один раз перед всем тестовым прибором. Если ваш тестовый класс имеет десять тестов, код @Before
будет выполняться десять раз, но @BeforeClass
будет выполняться только один раз.
В общем случае вы используете @BeforeClass
, когда несколько тестов должны делиться такой же дорогостоящий установочный код. Установление соединения с базой данных относится к этой категории. Вы можете переместить код с @BeforeClass
в @Before
, но ваш тестовый прогон может занять больше времени. Обратите внимание, что код, помеченный @BeforeClass
, запускается как статический инициализатор, поэтому он запускается до создания экземпляра класса вашего тестового устройства.
В JUnit 5 теги @BeforeEach
и @BeforeAll
являются эквивалентами @Before
и @BeforeClass
в JUnit 4. Их имена немного более показательны, когда они бегают, слабо интерпретируются: «перед каждым тестом» и «один раз перед всеми тестами».
До и BeforeClass в JUnit
Аннотации функции @Before
будут выполняться перед каждой тестовой функцией в классе, имеющем аннотацию @Test
, но функция с @BeforeClass
будет выполняться только один раз перед всеми тестовыми функциями в классе.
Аналогичная функция с аннотацией @After
будет выполняться после каждой из тестовых функций в классе, имеющем аннотацию @Test
, но функция с @AfterClass
будет выполняться только один раз после всех тестовых функций в классе.
SampleClass
public class SampleClass {
public String initializeData(){
return "Initialize";
}
public String processDate(){
return "Process";
}
}
SampleTest
public class SampleTest {
private SampleClass sampleClass;
@BeforeClass
public static void beforeClassFunction(){
System.out.println("Before Class");
}
@Before
public void beforeFunction(){
sampleClass=new SampleClass();
System.out.println("Before Function");
}
@After
public void afterFunction(){
System.out.println("After Function");
}
@AfterClass
public static void afterClassFunction(){
System.out.println("After Class");
}
@Test
public void initializeTest(){
Assert.assertEquals("Initailization check", "Initialize", sampleClass.initializeData() );
}
@Test
public void processTest(){
Assert.assertEquals("Process check", "Process", sampleClass.processDate() );
}
}
Выход
Before Class
Before Function
After Function
Before Function
After Function
After Class
В июне 5
@Before = @BeforeEach
@BeforeClass = @BeforeAll
@After = @AfterEach
@AfterClass = @AfterAll
Разница между каждой аннотацией:
+-------------------------------------------------------------------------------------------------------+
¦ Feature ¦ Junit 4 ¦ Junit 5 ¦
¦--------------------------------------------------------------------------+--------------+-------------¦
¦ Execute before all test methods of the class are executed. ¦ @BeforeClass ¦ @BeforeAll ¦
¦ Used with static method. ¦ ¦ ¦
¦ For example, This method could contain some initialization code ¦ ¦ ¦
¦-------------------------------------------------------------------------------------------------------¦
¦ Execute after all test methods in the current class. ¦ @AfterClass ¦ @AfterAll ¦
¦ Used with static method. ¦ ¦ ¦
¦ For example, This method could contain some cleanup code. ¦ ¦ ¦
¦-------------------------------------------------------------------------------------------------------¦
¦ Execute before each test method. ¦ @Before ¦ @BeforeEach ¦
¦ Used with non-static method. ¦ ¦ ¦
¦ For example, to reinitialize some class attributes used by the methods. ¦ ¦ ¦
¦-------------------------------------------------------------------------------------------------------¦
¦ Execute after each test method. ¦ @After ¦ @AfterEach ¦
¦ Used with non-static method. ¦ ¦ ¦
¦ For example, to roll back database modifications. ¦ ¦ ¦
+-------------------------------------------------------------------------------------------------------+
Большая часть аннотаций в обеих версиях одинакова, но мало чем отличается.
Порядок выполнения.
Пунктирная рамка -> необязательная аннотация.
@BeforeClas
является статическим. Он запускается до создания экземпляров тестового класса. – dasblinkenlight 5 October 2015 в 15:00