использование шаблона eclipse для создания тестовых случаев - PullRequest
5 голосов
/ 16 марта 2011

Часто я обнаруживаю, что создаю одни и те же методы модульных тестов для методов getters \ setters, c'tors и Object (hashCode, equals и toString).С помощью Eclipse IDE я пытаюсь добиться автоматизации этой процедуры.рассмотрим следующий пример:

public Class Person {
  private String id;
  private String name;

  public Person(String id, String name){
    this.id = id;
    this.name = name;
  }

  public String getId() { return id; }
  public void setId(String id) {
    this.id = id;
  }

  public String getName() { return name; }
  public void setName(String name) {
    this.name = name;
  }

  @override
  public int hashCode(){ ... }
  public boolean equals(Person other){ ... }
  public String toString(){ ... }

  /* this class may implement other logic which is irrelevant for the sake of question */
}

Класс модульного теста будет выглядеть примерно так:

public class PersonTest extends TestCase
{
  @override
  public void setup() {
    Person p1 = new Person("1","Dave");
    Person p2 = new Person("2","David");
  }

  @override
  public void tearDown() {
    Person p1 = null;
    Person p2 = null;
  }

  public void testGetId() {
    p1.setId("11");
    assertEquals("Incorrect ID: ", "11", p1.getId());
  }

  public void testGetName() { /* same as above */ }

  public void testEquals_NotEquals() { /* verify that differently initialized instances are not equals */ }

  public void testEquals_Equals() { /* verify that an object is equals to itself*/ }

  public void testHashCode_Valid() { /* verify that an object has the same hashcode as a similar object*/ }

  public void testHashCode_NotValid() { /* verify that different objects has different hashcodes*/ }

  public void testToString() { /* verify that all properties exist in the output*/ }
}

Этот скелет похож на подавляющее большинство созданных классов.это может быть автоматизировано с Eclipse?

Ответы [ 2 ]

11 голосов
/ 17 марта 2011

Посмотрите на Быстрый код .Это плагин Eclipse, который предоставляет очень приятную особенность шаблонов, что вы, похоже, ищете.На странице документации найдите раздел «Создание модульного теста».

Очень полезная функция этого плагина - автоматическое создание юнит-тестов.Модульные тесты могут быть типа Junit 3, Junit 4 или TestNG.Для тестов Junit 4 или TestNG соответствующие аннотации будут добавляться автоматически.Нужно настроить это только один раз.

3 голосов
/ 17 марта 2011

Модульные тесты призваны показать, что поведение объекта соответствует ожидаемому поведению.Они не предназначены для того, чтобы убедиться, что язык Java работает правильно.

Здесь вы видите причудливую структуру данных без какого-либо поведения.В этом случае каждое назначение опосредовано вызовом метода, и каждое разыменование также опосредовано вызовом метода.Поскольку объектно-ориентированное программирование - это «данные + поведение» = объекты, а в этом коде отсутствует поведение, его можно назвать необъектно-ориентированным кодом.

Иногда Java использует необъектно-ориентированные классы для облегчения передачиинформации.Класс гарантирует, что вся информация передается как единое целое при выполнении сериализации.Таким образом, наличие такого класса не является показателем того, что код неправильный;однако, если вы столкнетесь со слишком большим количеством таких классов, значит, что-то будет не так.

Одним из ключевых элементов тестирования является то, что на самом деле это не тест, если тест не может быть неудачным.Если тест не может провалиться, это просто занятая работа.Если предположить, что одно из этих полей не может быть нулевым, то установщик может выглядеть как

public void setName(String name) {
  if (name == null) throw new IllegalArgumentException("name cannot be null");
  this.name = name;
}

И тогда у вас есть что проверить.В противном случае вы просто проверяете, не произошел ли оператор присваивания.Кроме того, если бы оператор присваивания потерпел неудачу, я бы поспорил, что JVM скоро выйдет из строя довольно рано (а не позже), и вы не можете доверять своим тестам, чтобы сообщать правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...