it-swarm-eu.dev

Nezkoušené testy

Při provádění všech testů v programu Eclipse (Eclipse 3.4 'Ganymede') je jeden test uveden pod položkou "Unrooted Tests". Používám Junit 3.8 a tento konkrétní test rozšiřuje TestCase. Nevidím žádný rozdíl mezi tímto testem a ostatními testy. Nevzpomínám si, že by se to stalo v Eclipse 3.3 (Europa).

Vyjasnění:

Zatím jsme se přestěhovali do JUnit 4.0, takže anotace nepoužíváme. Také jsem googled a zdálo se, že většina lidí má problémy s JUnit 4, ale neviděl jsem žádné řešení. V tomto bodě test prochází lokálně i v CruiseControl, takže nejsem příliš znepokojený, ale zvědavý.

Když jsem to poprvé viděl, bylo to na neúspěšném testu, který selhal pouze při běhu s jinými testy. To mě vedlo dolů po králičí díře, kde jsem hledal řešení problému "Unrooted", který jsem nikdy nenašel. Nakonec jsem našel viníka v jiném testu, který nebyl řádně trhat.

Souhlasím, zdá se, že je to otázka Eclipse.

31
Paul Croarkin

Nakonec jsem našel řešení. Problém je v tom, že nedefinujete testovací případy pomocí anotací, ale stále to děláte "starým způsobem". Jakmile převedete na anotace, budete moci znovu spustit jeden test.

Zde je příklad toho, jak by měl nyní základní test vypadat pomocí anotací:

import static org.junit.Assert.*; // Notice the use of "static" here
import org.junit.Before;
import org.junit.Test;

public class MyTests { // Notice we don't extent TestCases anymore

  @Before
  public void setUp() { // Note: It is not required to call this setUp()
    // ...
  }

  @Test
  public void doSomeTest() { // Note: method need not be called "testXXX"
    // ...
    assertTrue(1 == 1);
  }
}
21
ra9r

Dostával jsem také chybové hlášení "nezakotvené testy" a to zázračně zmizelo. Věřím, že to bylo kvůli tomu, že jsem používal Eclipse s projektem Maven. Když jsem do své testovací třídy přidal novou metodu a přidal jí anotaci @Test, začala se chybová zpráva, když jsem se pokusila spustit tuto metodu pomocí možnosti nabídky Spustit jako test Junit; ale jakmile jsem běžel maven stavět nezvaný test zprávy zmizel a já věřím, že je řešení problému v budoucnu. 

Spusťte sestavení maven, protože obnoví třídu, kterou používá JUnit.

16
Bob

Pokud vaše třída rozšiřuje TestCase někde ve své hierarchii, musíte použít testovací běžec JUnit 3 uvedený v rozevíracím seznamu pod konfiguracemi spuštění. Použití běžec JUnit 4 (výchozí věřím) způsobuje, že se tento testovaný jev nevyskytuje.

12
laz

Tuto chybu jsem dostal, protože jsem přejmenoval testovací metodu a pokusil jsem se spustit test v programu Eclipse kliknutím na stejnou konfiguraci - odkazující na starou metodu, která nyní neexistovala.

6
Zoltán

Tento problém jsme vyřešili tak, že jsme si ověřili, že byl vytvořen náš zkušební projekt. Měli jsme problém v cestě sestavení, která by neumožnila kompilaci naší testovací třídy. Jakmile jsme vyřešili problém sestavení cesty, zkompilovaný test a metoda „nová“ byla spuštěna. Můžeme tedy předpokládat, že testy "Unrooted" také znamenají, že v kompilovaném binárním systému neexistují.

3
Ben Robie

Nikdy jsem to neviděl - ale pokud můžu říct, že jsem na pár minut skimmingu Google, zdá se, že by to mohlo být spíše chyba v Eclipse než problém s testem. Předpokládám, že v testu nemáte anotaci @Test? Můžete vyhodit test pryč a znovu ho vytvořit, a pokud ano, dostanete stejnou chybu?

2
Jim Kiley

Dalším scénářem, který způsobuje tento problém, byla slepá kopie/vložení metody, která vyžaduje parametr . tj.

import org.junit.Test;

public class MyTest {

    @Test
    public void someMethod(String param) {
          // stuff
    }

}

Máte několik jednoduchých řešení:

  1. definovat proměnnou ve specifické zkušební metodě

  2. přidejte ji jako proměnnou instance do testovací třídy

  3. vytvořte metodu nastavení a anotujte ji pomocí @Before

1
Kenny Cason

Pro mě to bylo kvůli projektu dostal problémy budování cesty. Konfiguraci závislostí maven je třeba aktualizovat. 

1
lwpro2

Měl jsem stejný problém s Java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

potřebujete sklenici hamcrest. stejná otázka 14539072: Java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

Toto jsou dva scénáře, ve kterých se zobrazí chyby Unrooted. 

  1. Pokud jste vynechali anotaci @ Test před testem.

    @Test

    public void foo () {}

  2. Pokud se jedná o projekt Gwt a když jsou definovány dvě simulace stejného objektu. Řekněme, že je jedna třída třídy A a 

    @GwtMock Private A atest; 

    @GwtMock Private A a; Pak se také zobrazí chyba Unrooted test.

1

Měl jsem ten problém a jeden " @Test " před tím, než to testovací metoda vyřešila! 

takhle:

@Test public void testOne() { // ... assertTrue(1 == 1); }

1
Nuno77

Nezvyšujte junit.framework.TestCase ve vaší testovací třídě s junit1.4 a to by mělo vyřešit problém 

0
geo

Mohl bych tento problém vyřešit posunem z TestRunner ver 4.0 na 3 v konfiguracích běhu pro jednotlivé testovací metody.

0
Krishna Kumar

Používáte Hamcrest? nebo jinou knihovnu, která vám pomůže ve vašem testu ?. Nepoužíváte  

import static org.junit.Assert.*;

Zkontrolujte, zda v testu používáte:

import static org.hamcrest.MatcherAssert.assertThat;

nebo jiné tvrzení není JUnit tvrdit.

0

Možná je to jen logický zmatek ohledně cíle metody. Vzpomeňme si: 

Např. správná testovaná metoda: 

@Test
@Transactional
@Rollback(true)
public void testInsertCustomer() {  
    (...)
}

S pluginem Eclipse Junit, můžete tuto metodu spustit pomocí kontextového menu přes metodu (např. V Průzkumníku rozšiřování třídy a metod a výběrem metody "testInsertCustomer ()" az této položky výběrem "Spustit jako test JUnit") .

Pokud jste zapomněli značku "@Test", nebo prostě nejde o test, ale o (soukromou nebo ne) běžnou metodu pro použití jako nástroj pro ostatní testy (např. "Private fillCustomerObject ()"), pak tato metoda není vyžadují značku „@Test“ a jednoduše ji nelze spustit jako test JUnit!

Je snadné, že byste mohli vytvořit metodu nástroje a později jste zapomněli skutečný cíl této metody, takže pokud se pokusíte spustit ji jako test, bude JUnit křičet "Unrooted Tests". 

0
Fran G Aparicio

Do tohoto problému jsem narazil tím, že jsem také nevyhlásil test za static.

0
Stubbs

Problémem bylo, že výjimka byla vyvolána metodami @BeforeClass nebo @AfterClass. To také způsobí, že testy budou kategorizovány jako nezařazené.

0
Tobber

Jedna další věc, kterou si můžete vyzkoušet, je upgrade vaší verze JUnit na alespoň 4.12.

Došlo k tomuto problému na chvíli s třídou, která rozšířila jeden, který používal @RunWith (Parameterized.class).

Po chvíli, a je mi líto, že nevím přesně, co jsem udělal, abych to způsobil, zpráva „Unrooted Tests“ (Odkryté testy) odešla, ale test stále nefungoval správně. Konstruktor, který měl přijmout argumenty z metody @Parameters, nebyl nikdy vyvolán; provedení vyskočilo přímo z @BeforeClass na @AfterClass.

Oprava tohoto problému spočívala v aktualizaci JUnit z verze 4.8.1, kterou používal, na poslední verzi (4.12). Možná by to mohlo v budoucnu pomoci někomu jinému.

0
Charlie Hurrell

Ukázalo se, že moje stavba má nějakou chybu ... chybí nějaké sklenice. Překonfiguroval jsem cestu sestavení a fungovalo to!

0
Vikrant K

Tuto chybu mám s názvem zkušební metody jako "test"

@Test 
public void test() {
 // ... assertTrue(1 == 1); 
}

Metodu jsem přejmenoval a fungovalo to 

0
Neil

Pro mě byl tento problém vytvořen výjimkou v reálném čase vyvolanou metodou @AfterClass (podívejte se zde pro dokumentaci):

V podstatě všechny testovací metody uspěly, ale na konci třídy tato metoda selhala. Proto se zdá, že všechny testy jsou v pořádku, ale na mé Eclipse se nezdařilo další "nezakořený test".

0
rakwaht