Конструктор зависимостей JMockit - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь смоделировать зависимость от домена, пока тестирую класс обслуживания, используя JMockit.Проблема в том, что объект Domain создается в одном из методов Сервиса, а используемый конструктор Domain имеет параметры.

Класс домена:

package com.example;
public class DomainClass {
  String str;
  public DomainClass(String s) {
    str=s;
  }
  public String domainMethod() {
    return str;
  }
}

Класс обслуживания

package com.example;
public class ServiceClass {
  public String serviceMethod() {
    return new DomainClass("original").domainMethod();
  }
}

Как мне смоделировать DomainClass, который использует ServiceClass?

Примечание: я не собираюсь менятьДомен или Сервисные классы.(Я понимаю, что этот код тривиален и его можно написать лучше, но это просто простой пример более сложного кода.)

Тестовый класс (окончательный ответ)

package com.example;
import org.testng.*;
import org.testng.annotations.*;
import mockit.*;
public class TestClass {
  @Mocked DomainClass domainClass;
  @Test
  public void testMethod() {
      new Expectations() {{
          new DomainClass("original").domainMethod(); result = "dummy";
      }};
      String ss = new ServiceClass().serviceMethod();
      System.out.println(ss);
      Assert.assertEquals(ss, "dummy");
  }
}

1 Ответ

0 голосов
/ 19 октября 2018

В документации JMockit должен быть ответ на этот вопрос.

В любом случае, чтобы смоделировать класс, просто используйте @Mocked DomainClass (как фиктивное поле или параметр метода тестирования).

Кстати, наличие new DomainClass("original").domainMethod() - это не «плохой дизайн» (наоборот, превращение его в синглтон - впрыскивается или нет - будет).Однако, насмешливый такие классы вполне могут быть плохой идеей;всегда предпочитаю не издеваться.

...