2014-04-02 26 views
11

Jaki jest proponowany sposób wykonywania testów na makrach Scala?Jak testować makra Scala?

Zdaję sobie sprawę, że potrzebne są dwa projekty ze względu na konieczność osobnej kompilacji. Ten krok, jeśli to konieczne, jest akceptowalny i przeważnie jasny.

Ale jak twierdzić, że ekspansja makr nie powiedzie się, kiedy powinna? Bez jakiejś specjalnej instalacji przypadek testowy nie zostanie skompilowany, a zatem cały projekt testowy nie zostanie skompilowany.

myślę, że to assert wymaga innego makro postaci

errors(code: => _): List[CompileError] 

który zwraca błędy kompilacji na wewnętrzny makro. To samo będzie wymagane do testowania ostrzeżeń, jeśli powinny one być itd.

Czy są jakieś urządzenia do testowania makr Scala?

+4

+1. Zobacz także [to pytanie dotyczące testowania niekompilacji w Scali] (http://stackoverflow.com/q/15125457/334519) i [ten o dokumentowaniu makr Scala] (http://stackoverflow.com/q/13840784/334519). –

+0

Poprzednie pytanie ma obiecujące odpowiedzi. Dzięki za wskazówkę! –

Odpowiedz

2

Można użyć assertDoesNotCompile od ScalaTest. Oto przykład użycia tego przetestować typechecker Scala:

import org.scalatest.FunSuite 

class TypeTest extends FunSuite { 
    test("String vals can't hold ints") { 
    assertDoesNotCompile("val x: String = 1") 
    } 
} 

można przekazać ciąg zawierający przykładowe makro, gdy ekspansja powinna nie assertDoesNotCompile. Zauważ, że istnieje również assertCompiles, jeśli czujesz taką potrzebę.