Как я могу издеваться над классом Hadoop FileStatus, используя Scalamock? - PullRequest
1 голос
/ 21 мая 2019

Я пытаюсь смоделировать класс FileStatus из общей библиотеки Java Hadoop.В результате возникают следующие ошибки компилятора:

Error:(34, 24) double definition:
override def compareTo(o: Any): Int at line 34 and
override def compareTo(x$1: T): Int at line 34
have same type after erasure: (o: Object)Int
    val mockFile = mock[FileStatus]
Error:(34, 24) name clash between defined and inherited member:
def compareTo(x$1: T): Int in trait Comparable and
override def compareTo(o: Any): Int at line 34
have same type after erasure: (x$1: Object)Int
    val mockFile = mock[FileStatus]

Проблема может заключаться в том, что этот класс расширяет Comparable без указания каких-либо параметров типа.Соответствующий фрагмент Java из его исходного кода можно посмотреть здесь:

public class FileStatus implements Writable, Comparable {
  // <snipped>
  @Override
  public int compareTo(Object o) {
    FileStatus other = (FileStatus)o;
    return this.getPath().compareTo(other.getPath());
  }
 // <snipped>
}

Чтобы воспроизвести ошибку компилятора, просто добавьте зависимость в org.apache.hadoop: hadoop-common: 2.6.5 и создайте следующий метод Scalatest:

test("my failing test") {
  // your imports
  import org.apache.hadoop.fs.FileStatus
  // code that fails
  val mockFile = mock[FileStatus]
}

Есть ли способ обойти это, чтобы позволить этому классу быть смоделированным с помощью Scalamock?Для справки: Scalamock 3.6.0, Scala 2.11 и Oracle JDK 1.8.0_181.

...