Статьи

Пакет мобильности NetBeans и тестирование


Недавно я перешел на использование
NetBeans Mobility Pack , хотя я не выношу большой блок управляющего кода, который автоматически генерируется IDE. Но это не тема на сегодня: вместо этого я бы хотел кратко поговорить о тестировании.

Если вы создадите проект MIDP или библиотеку MIDP, вы обнаружите, что не поддерживается JUnit, кроме варианта с именем JMUnit.

Цитируя DevX , причина в следующем:

Однако использовать JUnit или найти расширение JUnit для использования в разработке Java Micro Edition (ME) было довольно сложно. Фреймворки JUnit полагаются на отражение Java. Поскольку рефлексивный API отсутствует в средах Java ME, типичные инструменты JUnit, которые сильно зависят от рефлексии, не помогают. Несмотря на это, есть два (скоро будет одно — чуть больше об этом чуть-чуть) расширения Java ME JUnit, созданные специально для разработчиков приложений для устройств.

Я хотел бы

прилавок
противоречит этому утверждению. Да, это правда, что JUnit требует рефлексии, а CLDC / MIDP не рефлексирует, но кто сказал, что ваши тесты должны обязательно выполняться в среде J2ME? В конце концов, тестовый код не является рабочим кодом, и почему я не должен использовать возможности полного J2SE (и знакомства с JUnit) для своих тестов? В конце концов, J2ME не является полноценной Java, но в ней действительно хорошо то, что она является подмножеством и может быть смешана с полноценным Java-кодом.

Что вы думаете? Я считаю, что NetBeans должен добавить возможность использования обычного JUnit для тестирования проектов J2ME.

В то же время, вы можете выжить с небольшим трюком:

  1. Допустим, у вас есть проект библиотеки MIDP под названием MobileMaps (это компонент windRose , мой проект — вы можете проверить его по адресу https://windrose.dev.java.net/svn/windrose/trunk/src ).
  2. Создайте стандартный проект библиотеки J2SE с именем MobileMapsTest.
  3. Откройте свойства проекта и удалите папку «src» (не очень нужна, просто чтобы быть разборчивой).
  4. Перейдите на панель библиотек и добавьте MobileMaps в зависимости от MobileMapsTest.
  5. Теперь просто создайте свои тесты с помощью JUnit в MobileMapsTest. Вы даже можете использовать Java 5, если хотите.

Например, это небольшой тест для класса MIDP:

package it.tidalwave.microedition.map.osm;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;

public class OSMTileSourceTest
{
private OSMTileSource fixture;

@Before
public void setupFixture()
{
fixture = new OSMTileSource();
}

@After
public void tearDownFixture()
{
fixture = null;
}

@Test
public void testCachePrefix()
{
assertEquals("OSM/", fixture.getCachePrefix());
}

@Test
public void testDefaultZoomLevel()
{
assertEquals(9, fixture.getDefaultZoomLevel());
}

@Test
public void testDisplayName()
{
assertEquals("OpenStreetMap", fixture.getDisplayName());
}

@Test
public void testMaxZoomLevel()
{
assertEquals(17, fixture.getMaxZoomLevel());
}

@Test
public void testMinZoomLevel()
{
assertEquals(1, fixture.getMinZoomLevel());
}

@Test
public void testGetTileSize()
{
assertEquals(256, fixture.getTileSize());
}

@Test
public void testMetersPerPixel()
{
assertEquals(39135.758482, r(fixture.metersPerPixel(17 - 2)));
assertEquals(19567.879241, r(fixture.metersPerPixel(17 - 3)));
assertEquals( 9783.939621, r(fixture.metersPerPixel(17 - 4)));
assertEquals( 4891.969810, r(fixture.metersPerPixel(17 - 5)));
assertEquals( 2445.984905, r(fixture.metersPerPixel(17 - 6)));
assertEquals( 1222.992453, r(fixture.metersPerPixel(17 - 7)));
assertEquals( 611.496226, r(fixture.metersPerPixel(17 - 8)));
assertEquals( 305.748113, r(fixture.metersPerPixel(17 - 9)));
assertEquals( 152.874057, r(fixture.metersPerPixel(17 - 10)));
assertEquals( 76.437028, r(fixture.metersPerPixel(17 - 11)));
assertEquals( 38.218514, r(fixture.metersPerPixel(17 - 12)));
assertEquals( 19.109257, r(fixture.metersPerPixel(17 - 13)));
assertEquals( 9.554629, r(fixture.metersPerPixel(17 - 14)));
assertEquals( 4.777314, r(fixture.metersPerPixel(17 - 15)));
assertEquals( 2.388657, r(fixture.metersPerPixel(17 - 16)));
assertEquals( 1.194329, r(fixture.metersPerPixel(17 - 17)));
assertEquals( 0.597164, r(fixture.metersPerPixel(17 - 18)));
}

private static double r (final double v)
{
final int s = 1000000;
return Math.floor(v * s + 0.5) / s;
}
}

Что вы теряете, так это мастер создания скелетного теста JUnit из существующего класса — вы можете выжить без него, но жаль, поэтому я считаю, что JUnit должен поддерживаться пакетом Mobility Pack.

И в этот момент, вещь может даже пойти под Хадсон .