Scalatest Maven Plugin "тесты не выполнялись"

Я пытаюсь использовать самые масштабные и искровые тестовые базы на Maven для интеграционного тестирования Spark. Задание Spark считывает файл CSV, проверяет результаты и вставляет данные в базу данных. Я пытаюсь проверить валидацию, вставив файлы известного формата и проверив, не удастся ли и как. Этот конкретный тест просто подтверждает, что проверка прошла успешно. К сожалению, scalatest не может найти мои тесты.

Соответствующие плагины POM:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <skipTests>true</skipTests>
            </configuration>
        </plugin>
        <!-- enable scalatest -->
        <plugin>
            <groupId>org.scalatest</groupId>
            <artifactId>scalatest-maven-plugin</artifactId>
            <version>1.0</version>
            <configuration>
                <reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory>
                <wildcardSuites>com.cainc.data.etl.schema.proficiency</wildcardSuites>
            </configuration>
            <executions>
                <execution>
                    <id>test</id>
                    <goals>
                        <goal>test</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

А вот и тестовый класс:

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)
        }
    }
}

Когда я бегу mvn test, он не может найти никаких тестов и выводит это сообщение:

[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

ОБНОВИТЬ
Используя:

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

Вместо:

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

Я могу получить этот тест для запуска. Очевидно, это не идеально. Возможно, wildcardSuites не работает; Я собираюсь открыть тикет на GitHub и посмотреть, что получится.

6 ответов

Вероятно, это связано с тем, что в пути проекта есть несколько пробелов. Удалите место в пути проекта, и тесты могут быть успешно обнаружены. Надеюсь, это поможет.

Проблема, с которой я столкнулся с тем, что тесты не обнаруживались, сводилась к тому, что тесты были обнаружены из class файлы, поэтому для обнаружения тестов мне нужно добавить <goal>testCompile</goal> к scala-maven-plugin goals.

Попробуйте исключить junit как транзитивную зависимость. Работает для меня. Пример ниже, но обратите внимание, что версии Scala и Spark относятся к моей среде.

   <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>

Со мной это потому, что я не использовал следующий плагин:

<plugin>
        <groupId>org.scala-tools</groupId>
        <artifactId>maven-scala-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>
              <goal>testCompile</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <scalaVersion>${scala.version}</scalaVersion>
          <args>
            <arg>-target:jvm-1.8</arg>
          </args>
        </configuration>
      </plugin>

В моем случае это из-за вложенности тестов в тестовую директорию и использования<memberOnlySuites>конфигурация.<memberonlySuites>ищет только тестовые файлы в заданном пакете / каталоге. Вместо этого используйте<wildcardSuites>который будет просматривать пакет / каталог и все его подкаталоги.

Это часто происходит, когда вы добавляете больше тестов в свой набор тестов и организуете их более структурированным образом.

Причина: плагины Maven не компилируют ваш тестовый код всякий раз, когда вы запускаете команды mvn.

Обойти:

Запустите тесты scala с помощью вашей IDE, которая скомпилирует тестовый код и сохранит его в целевом каталоге. И когда вы в следующий раз запустите mvn test или любую команду maven, которая внутренне запускает цикл тестирования maven, она должна запустить тесты scala

Другие вопросы по тегам