2016-08-01 23 views
6

Ich versuche scalatest und spark-testing-base auf Maven für Integrationstest Spark zu verwenden. Der Spark-Job liest eine CSV-Datei ein, validiert die Ergebnisse und fügt die Daten in eine Datenbank ein. Ich versuche, die Validierung zu testen, indem ich Dateien bekannter Formate einfüge und sehe, ob und wie sie fehlschlagen. Dieser spezielle Test stellt nur sicher, dass die Validierung erfolgreich ist. Leider kann scalatest meine Tests nicht finden.Scalatest Maven Plugin "keine Tests wurden ausgeführt"

Relevante pom Plugins:

Und hier ist der Test-Klasse:

class ProficiencySchemaITest extends FlatSpec with Matchers with SharedSparkContext with BeforeAndAfter { 
    private var schemaStrategy: SchemaStrategy = _ 
    private var dataReader: DataFrameReader = _ 

    before { 
     val sqlContext = new SQLContext(sc) 
     import sqlContext._ 
     import sqlContext.implicits._ 

     val dataInReader = sqlContext.read.format("com.databricks.spark.csv") 
              .option("header", "true") 
              .option("nullValue", "") 
     schemaStrategy = SchemaStrategyChooser("dim_state_test_proficiency") 
     dataReader = schemaStrategy.applySchema(dataInReader) 
    } 

    "Proficiency Validation" should "pass with the CSV file proficiency-valid.csv" in { 
     val dataIn = dataReader.load("src/test/resources/proficiency-valid.csv") 

     val valid: Try[DataFrame] = Try(schemaStrategy.validateCsv(dataIn)) 
     valid match { 
      case Success(v) =>() 
      case Failure(e) => fail("Validation failed on what should have been a clean file: ", e) 
     } 
    } 
} 

Als ich mvn test laufen, es kann keine Tests und gibt diese Meldung finden:

[INFO] --- scalatest-maven-plugin:1.0:test (test) @ load-csv-into-db --- 
[36mDiscovery starting.[0m 
[36mDiscovery completed in 54 milliseconds.[0m 
[36mRun starting. Expected test count is: 0[0m 
[32mDiscoverySuite:[0m 
[36mRun completed in 133 milliseconds.[0m 
[36mTotal number of tests run: 0[0m 
[36mSuites: completed 1, aborted 0[0m 
[36mTests: succeeded 0, failed 0, canceled 0, ignored 0, pending 0[0m 
[33mNo tests were executed.[0m 

UPDATE
Durch die Verwendung von:

<suites>com.cainc.data.etl.schema.proficiency.ProficiencySchemaITest</suites> 

Statt:

<wildcardSuites>com.cainc.data.etl.schema.proficiency</wildcardSuites> 

ich bekommen kann, dass ein Test zu starten. Offensichtlich ist das nicht ideal. Es ist möglich, dass WildcardSuites kaputt ist; Ich werde ein Ticket auf GitHub öffnen und sehen, was passiert.

+0

Wo befindet sich 'ProficiencySchemaITest'? – hasumedic

+0

src/test/scala/com/cainc/daten/etl/schema/proficiency/ProficiencySchemaITest.scala. Ich habe in meinem Pom: src/main/scala \t \t src/test/scala Azuaron

+0

Ich kann auch in '' 'target /' '', dass die '' '.class''' Dateien wurden erstellt. – Azuaron

Antwort

2

Dies liegt wahrscheinlich daran, dass im Projektpfad Leerzeichen enthalten sind. Entfernen Sie Speicherplatz im Projektpfad, und die Tests können erfolgreich ermittelt werden. Hoffe diese Hilfe.

+0

Vollständiger Pfad: C: \ dev \ projekte \ nintendo \ spark-data-load \ src \ main \ blah \ blah \ blah – Azuaron

+0

Das Problem mit Leerzeichen im Projektpfad sollte in diesem PR behoben werden: https: // github. com/scalatest/scalatest-maven-plugin/pull/37 – cstroe

0

Versuchen Sie, Junit als transitive Abhängigkeit auszuschließen. Funktioniert bei mir. Beispiel unten, aber beachten Sie, dass die Scala und Spark Versionen spezifisch für meine Umgebung sind.

<dependency> 
     <groupId>com.holdenkarau</groupId> 
     <artifactId>spark-testing-base_2.10</artifactId> 
     <version>1.5.0_0.6.0</version> 
     <scope>test</scope> 
     <exclusions> 
      <!-- junit is not compatible with scalatest --> 
      <exclusion> 
       <groupId>junit</groupId> 
       <artifactId>junit</artifactId> 
      </exclusion> 
     </exclusion> 
    </dependency>