JUnit mock из Environment с Mockito не работает, оценка до нуля - PullRequest
0 голосов
/ 23 июня 2018

У меня есть класс MyClass, в котором @Autowired private Environment env;. Он также имеет public MyFunctionA(), который вызывает private MyFunctionB(), а в MyFunctionB() он вызывает env.getProperty(propName), который возвращает строковое значение из файла свойств в MyFunctionA() в качестве фактора при его вычислении. Но в настоящее время при отладке теста JUnit я не могу смутить env, не получив null.

Класс модульного тестирования MyServiceTest для MyClass начинается следующим образом:

public class MyServiceTest {

    @Mock 
    final Environment env = Mockito.mock(Environment.class);

    MyServiceImpl myService;

    @Before
    public void setUp() throws Exception {
       Mockito.when(this.env.getProperty("myProperty")).thenReturn("1234,2345");

        myService = new MyServiceImpl();

Позже, в функции модульного тестирования, она вызывает MyFunctionA(), но отладка показывает, что MyFunctionB() встречает NPE при выполнении вызова env.getProperty. Что может быть не так? Тест выглядит так:

@Test
public void myUnitTest() throws IOException {
    boolean boolFlag = myService.MyFunctionA();
    assertTrue(boolFLag);
}

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Как сказал @Mureinik, возникли проблемы с созданием вашего объекта.Однако, если вы полагаетесь на аннотации из Mockito, вам нужно инициализировать объекты, используя runner MockitoJUnitRunner или вызывая MockitoAnnotations.initMocks(this);

Окончательная конфигурация:

public class MyServiceTest {

@Mock 
Environment env;

@InjectMocks
MyServiceImpl myService;

@Before
public void setUp() throws Exception {
   MockitoAnnotations.initMocks(this);
   Mockito.when(this.env.getProperty("myProperty")).thenReturn("1234,2345");
}

// Tests ...
0 голосов
/ 23 июня 2018

Здесь есть два вопроса:

  1. Вы переопределяете фиктивный объект, созданный аннотацией @Mock, явно присваивая новое (ложное) значение env.
  2. Вам не хватает аннотации @InjectMocks, чтобы добавить поддельный env вашему myService участнику:


public class MyServiceTest {

    @Mock 
    Environment env; // issue #1

    @InjectMocks // issue #2
    MyServiceImpl myService = new MyServiceImpl()

    @Before
    public void setUp() throws Exception {
       Mockito.when(this.env.getProperty("myProperty")).thenReturn("1234,2345");
    }

    // Tests ...
...