Scala + IntellIJ CE

0

W ramach przerywników od zajęć bieżących postanowiłem zaprzyjaźnić się ze Scalą. Używam IntelliJ CE z pluginem do scali.
Może ktoś potknął się o podobny problem i ma jakąś dobrą radę? ;-)

W build.sbt mam następujące wpisy, które IntellIJ zaimportowało i zaktualizowało intellijejowy opis projektu (tj. pojawiły się biblioteki).

scalaVersion := "2.12.5"
libraryDependencies += "org.scalatest" % "scalatest_2.12" % "3.0.5" % "test"
libraryDependencies += "org.scalactic" % "scalactic_2.12" % "3.0.5" % "test"
resolvers += "Sonatype OSS Public" at "https://oss.sonatype.org/content/groups/public/"

Teraz jak piszę jakieś proste rzeczy z wykorzystaniem DSLa ScalaTest, typu:

3 should equal (3)

, to intellij skarży się, że nie rozumiem DSLa. I teraz kilka pytań:

  1. Czy powinno się skarżyć? Wydaje mi się, że powinno wspierać.
  2. Jakieś pomysły dlaczego się skarży? (Może zbyt nowe wersje bibliotek? )
0

Zaimportowales wszystkie potrzebne implicit'y?

cos jak: import org.scalatest._ albo cos podobnego?

1

Wrzuć projekt na githuba i podeślij linka.

Poza tym:

libraryDependencies += "org.scalatest" % "scalatest_2.12" % "3.0.5" % "test"
libraryDependencies += "org.scalactic" % "scalactic_2.12" % "3.0.5" % "test"
  1. Scalactic zaciągnie się sam przy zaciąganiu ScalaTesta (jest przechodnią zależnością).
  2. Nie używaj końcówek typu "_2.12" wprost. Zamiast;
    "org.scalatest" % "scalatest_2.12" % "3.0.5" % "test"
    zrób:
    "org.scalatest" %% "scalatest" % "3.0.5" % Test
    Wtedy zawsze zaciągniesz wersję biblioteki pod wersję Scali którą używasz w projekcie. Wersje Scali są binarnie niekompatybilne (oprócz małej wersji, czyli np 2.12.x jest kompatybilna z 2.12.y, ale już z 2.11.z nie) - używając nie tej wersji co trzeba wchodzisz na minę.

Rozpoczynając przygodę ze ScalaTestem nie zapomnij też zdefiniować klasy bazowej: http://www.scalatest.org/user_guide/defining_base_classes
Mieszanie traitów wydłuża czas kompilacji w porównaniu do zwykłego rozszerzania klas. Najlepiej jest mieć kilka bazowych abstrakcyjnych klas z wmieszanymi traitami ze ScalaTesta, a potem rozszerzać te swoje klasy przy tworzeniu zestawów testów. Na podanej stronie jest też wyraźnie napisane:

you might create a UnitSpec class (not trait, for speedier compiles) for unit tests

1 użytkowników online, w tym zalogowanych: 0, gości: 1