Тестирование и Mocking ScalaGraph с Гремлином - PullRequest
1 голос
/ 04 марта 2020

У меня есть класс обслуживания, который я пытаюсь выполнить модульное тестирование. Класс обслуживания выглядит следующим образом -:

class BtoService @Inject()(db: GrDbConnection,
                           businessService: BusinessService,
                           vertexIdGenerator: VertexIdGenerator) {

def updateBto(id: String, updateBTOReq: UpdateBTORequest) = {
implicit val g = db.g
    val btoVertex = g
      .V(
        vertexIdGenerator.vertexId(VertexLabels.BTO, id, PropertyLabels.BTO_ID))
      .headOption() match {
      case Some(value) => value
      case None        => throw BtoDoesNotExistException(s"BTO $id Does not exists")
}

Итак, во время тестирования этого класса я создаю макет внедряемых служб (BusinessService, GrDbConnection) -:

  val db: GrDbConnection = mock[GrDbConnection]
  val businessService: BusinessService = mock[BusinessService]
  val vertexIdGenerator: VertexIdGenerator = mock[VertexIdGenerator]

  val btoService: BtoService = new BtoService(db, businessService, vertexIdGenerator)
  val g : ScalaGraph = EmptyGraph
        .instance()
        .asScala()

    btoService.updateBto("101",updateBTORequest)
    Mockito.when(db.g).thenReturn(g)

GrDbConnection. scala имеет определенную db.g -:

val g: ScalaGraph = EmptyGraph
    .instance()
    .asScala
    .configure(_.withRemote(connection))

здесь соединение имеет необходимые данные для подключения к актуальной базе данных.

Поскольку я могу вернуть пустой график scala с помощью Mockito .when (). thenReturn (), я предпочел не использовать опцию .configure () в моем тестовом классе.

Моя настоящая проблема, с которой я сталкиваюсь, заключается в том, что я не могу добавить вершину в тест graph, мне нужно добавить btoModel в качестве вершины графа, поскольку в классе обслуживания:

val btoVertex = g.V(vertex......()).headOption() - returns a GremlinScala.Aux[scala.vertex, Hnil]

Как мне продолжить? пожалуйста, свяжитесь со мной по телефону - nilay0016@gmail.com для получения дополнительной информации.

...