как написать junit для приведенного ниже метода, который возвращает имя MongoDB

#java #unit-testing #junit #mocking #mockito

Вопрос:

 public String getMongoDBName() throws Exception {

return mongoConnectionDetails.getMongoDatabase().getName();

}
 

Пользовательский класс Mongoconnectiondetail автоматически подключается здесь.

То, что я пытался, это

 Mock (mongoDboperation);

when(mongoConnectionDetails.getMongoDatabase().getName()).thenReturn("dbName");

String output = mongoDboperation.getMongoDBName();

assertEquals (output, "actualDBname");
 

Но гидролокатор все еще показывает это в виде красных незакрытых линий. Пожалуйста, помогите. Спасибо!

Комментарии:

1. если вы издеваетесь над mongoDboperation, это не может быть ожидаемым результатом

2. Методы модульного тестирования «геттер» имеют очень высокое соотношение затрат и выгод. Потратьте свое время на что-нибудь другое.

Ответ №1:

Вы не получаете покрытия для этого метода, потому что вы запускаете тест с макетом объекта. Это означает, что вы тестируете только макет, а не исходный класс.

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

Комментарии:

1. Так что это класс ДАО. Вы имеете в виду , что я должен создать объект DAO с новой или автоматической проводкой, а затем имитировать зависимости, верно ?

2. Да, именно это я и имел в виду, но я бы также согласился с комментарием Дауда ибн Карима выше о том, что модульное тестирование DAO с помощью насмешек не так уж полезно. Описанный выше метод на самом деле не имеет никакой логики или вычислений для тестирования, поэтому тестирование с помощью макета проверяет только то, что он вызывает метод, который он явно вызывает в исходном коде. Это не доказывает, что это действительно работает. Было бы более полезно получить покрытие для этого с помощью интеграционных тестов, которые используют реальную базу данных.