Junit: тестов не найдено

Я унаследовал проект Java, и я новичок в разработке Java. Я чувствую, что для меня удобно освоить код - написать несколько тестов. Я пишу свой код, используя IntelliJ.

Мой существующий проект имеет такую структуру папок:

/myProject
  /src
    /main
      /java
        /com.lexcorp
          /core
            /email
              /providers
                emailProvider.java

Я создал новый проект, который будет проводить тесты для этого проекта. Я бы хотел, чтобы этот проект проводил как модульные, так и интеграционные тесты. В настоящее время мой новый проект имеет такую структуру:

/myProjectTests
  /src
    /main
      /java
        /com.lexcorp.core.email.providers
          emailProviderTest.java

Файл emailProviderTest.java выглядит следующим образом:

package com.lexcorp.core.email.providers;

import junit.framework.TestCase;
import org.junit.Test;

public class EmailProviderTest extends TestCase {

    private final String username = "[testAccount]";

    private final String password = "[testPassword]";

    @Test
    public void thisAlwaysPasses() {
        assertTrue(true);
    }
}

Этот проект имеет конфигурацию Run/Debug со следующими свойствами:

  • Тип теста: все в упаковке
  • Поиск тестов: во всем проекте

Когда я запускаю эту конфигурацию, я получаю сообщение об ошибке:

junit.framework.AssertionFailedError: No tests found in com.lexcorp.core.email.providers.EmailProviderTest
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84)
    at org.junit.runners.Suite.runChild(Suite.java:127)
    at org.junit.runners.Suite.runChild(Suite.java:26)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:202)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:65)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

Я не понимаю, почему я получаю сообщение об ошибке: "Тесты не найдены". В то время как структура моего проекта отличается, структура папок в ОС совпадает (что меня смущает). Почему я получаю эту ошибку и как ее исправить?

Ответ 1

Я тоже получал ошибку

junit.framework.AssertionFailedError: тестов не найдено...

Но я забыл указать

defaultConfig {
    ...
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

После проектов синхронизации он обнаружил тесты. Так что, возможно, это помогает кому-то еще

Ответ 2

Расширение junit.framework.TestCase - это старый подход JUnit 3 для реализации тестовых примеров, который не работает, поскольку никакие методы не начинаются с теста букв. Поскольку вы используете JUnit 4, просто объявите класс как

public class EmailProviderTest {

и метод тестирования будет найден из аннотации @Test.

Читайте: JUnit confusion: используйте 'extend Testcase' или '@Test'?

Ответ 3

Я тоже получал это:

junit.framework.AssertionFailedError: тестов не найдено...

Решено путем переименования метода тестирования из метода1

@Test
public void method1(){
    // Do some stuff...
}

до testMethod1

@Test
public void testMethod1(){
    // Do some stuff...
}

Ответ 4

если вы используете jUnit 4, тогда не используйте extends TestCase, удалив эту исправленную ошибку.

Ответ 5

У меня была та же проблема, в Intellij IDEA, для платформы Java. Я все делал правильно:

  • класс, унаследованный от TestCase
  • Я импортировал junit.framework.TestCase
  • Я добавил украшение @Test

Но я сделал одну ошибку: название метода не начиналось с "test", фактически было:

@Test
public void getSomethingTest(){

и когда я изменил его на:

@Test
public void testGetSomethingTest(){

Я решил: исполнитель наконец смог распознать этот метод в качестве тестового. Я ничего не изменил.

Ответ 6

У меня было это при использовании поставщика данных, и у одного из параметров был новый символ строки, например:

@DataProvider
public static Object[][] invalidAdjustment() {
    return new Object[][]{
            {"some \n text", false},
            };
}

Удаление \n решило проблему

Ответ 7

В моем случае мне понадобился junit4-version.jar в пути к классам Junit задачи, а также:

ant-version.jar
ant-junit-version.jar
ant-junit4-version.jar

в библиотеке моей установки муравья (/usr/share/ant/lib).

Я получаю сообщение об ошибке "junit.framework.AssertionFailedError: тесты не найдены в...", хотя у меня не было ant-junit4-*version*.jar в нужном месте.

Я исправил это, установив необязательный пакет debian/ubuntu:

apt-get install ant-optional

Ответ 8

Я беспокоился об этом, и ни один из ответов не помог мне, пока я не переместил исходный файл теста из этой папки:

src/test/java/com/junit/test

до этой папки:

src/test/java/com/junit

Ответ 9

Другая причина, как правило, я вижу людей, имеющих параметры метода, удалять любые параметры, которые могут быть у вас в методе тестирования, независимо от того, добавляете ли вы аннотацию @Test, вам нужно, чтобы ваше имя метода начиналось с "теста", чтобы Junit выбрал вас прецедент. надеюсь, что это поможет.

Ответ 10

Имя тестового метода public void test Имя() {}

Где имя() в методах имен имен источников.