Как получить экземпляры из контейнера ввода зависимостей в модульных тестах? - PullRequest
1 голос
/ 20 мая 2019

Допустим, у меня есть следующий класс:

import com.fasterxml.jackson.databind.ObjectMapper

class Foo(private val jsonMapper: ObjectMapper) {
    // ...
}

И соответствующий тест:

import com.fasterxml.jackson.databind.ObjectMapper

@RunWith(MockitoJUnitRunner::class)
class FooTest {

    private val jsonMapper = ObjectMapper().findAndRegisterModules()

    private lateinit var foo: Foo

    @Before
    fun makeFoo() {
        foo = Foo(jsonMapper)
    }
}

Моя проблема в том, что мне нужно позвонить findAndRegisterModules (чтобыjsr310 поддержка и т. Д.) Вручную.Я бы предпочел, чтобы Spring Boot решал, как построить мои зависимости.

Но следующее не удается из-за java.lang.Exception: Test class should have exactly one public zero-argument constructor:

import com.fasterxml.jackson.databind.ObjectMapper

@RunWith(MockitoJUnitRunner::class)
class FooTest(private val jsonMapper: ObjectMapper) {

    private val foo = Foo(jsonMapper)
}

Итак, как правильно обрабатывать такиеситуация?

1 Ответ

1 голос
/ 21 мая 2019

Ваш тест не пройден, потому что тесты JUnit4 должны иметь конструктор без аргументов.

Кроме того, ваш тест не использует Spring, поскольку вы используете аннотацию @ RunWith (MockitoJUnitRunner :: class) . Этот бегун позволяет инициализировать ваши ложные объекты и вводить их в объект тестирования ( Javadoc ).

Если вы хотите использовать Spring для конструирования объектов тестирования и его зависимостей, вам нужно использовать другой набор аннотаций (см. Этот учебник для получения более подробной информации):

@RunWith(SpringRunner::class)
@SpringBootTest 
class FooTest {
   @Autowired
   lateinit var foo: Foo
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...