La classe de Test doit avoir exactement un public zéro argument du constructeur
J'ai écrit une classe de test, tel que suit
public class MyParameterizedClassTest extends BaseRepositoryTest {
private int multiplierA;
private int multiplierB;
public MyParameterizedClassTest(int multiplierA) {
this.multiplierA = multiplierA;
}
@Parameters
public static Collection<Object[]> data() {
Object[][] data = new Object[][] { { 1 }, { 5 }, { 121 } };
return Arrays.asList(data);
}
@Test
public void testMultiplyException() {
assertEquals("Result", multiplierA * multiplierA,multiply(multiplierA));
}
public int multiply(int a){
return a*a;
}
}
Et Mon BaseRepositoryTest classe est le suivant
@RunWith (Parameterized. class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public abstract class BaseRepositoryTest extends
AbstractJUnit4SpringContextTests {
@Inject
SessionFactory sessionFactory;
private Transaction transaction;
public Session getSession() {
Session session;
try {
session = sessionFactory.getCurrentSession();
} catch (SessionException se) {
session = sessionFactory.openSession();
}
return session;
}
@Before
public void setUp() throws Exception {
transaction = getSession().beginTransaction();
}
@After
public void tearDown() throws Exception {
if (transaction != null) {
transaction.rollback();
}
getSession().close();
}
@Before
public void baseSetUp() {
MockitoAnnotations.initMocks(this);
}
}
Quand je lance ma classe de test il montre comme,
Test class should have exactly one public zero-argument constructor:at
org.junit.runners.BlockJUnit4ClassRunner.validateZeroArgConstructor
Je veux faire une méthode de test avec @paramètres,veuillez donc quelqu'un Peut s'il vous plaît aider à trouver la solution
Ressemble le mauvais testeur est de l'exécution de votre tâche. Nous avons besoin de comprendre pourquoi c'est pour résoudre ce problème.
Êtes-vous sûr que vos cours sont tous correctement compilé. Votre exception mentionne le
oui j'ai essayé avec l'annotation @RunWith (Paramétrable. classe),Maintenant, il montre java.lang.NullPointerException at com.kgfsl.les collections.de base.de sécurité.BaseRepositoryTest.getSession(BaseRepositoryTest.java:45) au com.kgfsl.les collections.de base.de sécurité.BaseRepositoryTest.le programme d'installation(BaseRepositoryTest.java:54) au soleil.de réfléchir.NativeMethodAccessorImpl.invoke0(Native method)
Ma réponse était sûrement basé sur une base java : Java Constructeurs-Note, Voir la Note. Si une classe définit explicitement un constructeur, il n'a plus aucun constructeur par défaut pour définir l'état des objets. Si une telle classe, un constructeur par défaut, sa mise en œuvre doit être fournie. Toute tentative d'appeler le constructeur par défaut sera une erreur de compilation si explicitement un constructeur par défaut n'est pas prévue dans un tel cas.
il fonctionne parfaitement pour moi, rene. merci pour la solution
Êtes-vous sûr que vos cours sont tous correctement compilé. Votre exception mentionne le
BlockJUnit4ClassRunner
, mais un Parameterized
n'est pas une sous-classe de BlockJUnit4ClassRunner
. Voir junit.sourceforge.net/javadoc/org/junit/runners/.... Semble que le code compilé ne contient pas de @RunWith (Parameterized. class)
oui j'ai essayé avec l'annotation @RunWith (Paramétrable. classe),Maintenant, il montre java.lang.NullPointerException at com.kgfsl.les collections.de base.de sécurité.BaseRepositoryTest.getSession(BaseRepositoryTest.java:45) au com.kgfsl.les collections.de base.de sécurité.BaseRepositoryTest.le programme d'installation(BaseRepositoryTest.java:54) au soleil.de réfléchir.NativeMethodAccessorImpl.invoke0(Native method)
Ma réponse était sûrement basé sur une base java : Java Constructeurs-Note, Voir la Note. Si une classe définit explicitement un constructeur, il n'a plus aucun constructeur par défaut pour définir l'état des objets. Si une telle classe, un constructeur par défaut, sa mise en œuvre doit être fournie. Toute tentative d'appeler le constructeur par défaut sera une erreur de compilation si explicitement un constructeur par défaut n'est pas prévue dans un tel cas.
il fonctionne parfaitement pour moi, rene. merci pour la solution
OriginalL'auteur Md Aslam | 2014-10-31
Vous devez vous connecter pour publier un commentaire.
Je pense que le problème, c'est que vous avez défini deux les coureurs de l'épreuve. Un par vous-même
@RunWith (Parameterized. class)
et celui qui vient avec le printemps, parce qu'unAbstractJUnit4SpringContextTests
définit un@RunWith(SpringJUnit4ClassRunner.class)
.Depuis Junit ne peut traiter que d'un
@RunWith
vous ne pouvez utiliser@Parameterized
ouAbstractJUnit4SpringContextTests
. Si vous souhaitez utiliser tant que vous avez à utiliser@Parameterized
et de faire la même logique qu'unSpringJUnit4ClassRunner
ne sur votre propre.Une approche simple peut être simplement utiliser le printemps
org.springframework.test.context.TestContextManager
.Mais cela ne garantit que le
TestExecutionListener
s sont invoqués. Le printemps n'a normalement beaucoup plus comme le contexte de l'application de la mise en cache et ainsi de suite. Aussi une déchirure en bas de la méthode doit être mise en œuvre que se ferme le contexte de l'application.Oui il serait. Le problème avec un
Rule
est que vous ne pouvez pas obtenir facilement l'instance de test et vous en avez besoin pour letestContextManager.prepareTestInstance(this);
Ouais j'ai essayé ce code mais j'ai obtenu un message d'erreur tel que java.lang.NullPointerException at com.kgfsl.les collections.de base.de sécurité.BaseRepositoryTest.getSession(BaseRepositoryTest.java:45) au com.kgfsl.les collections.de base.de sécurité.BaseRepositoryTest.le programme d'installation(BaseRepositoryTest.java:54) au soleil.de réfléchir.NativeMethodAccessorImpl.invoke0(Native method)
Avez-vous essayé
@Autowired
au lieu de@Inject
?Oui, j'ai essayé, mais rien n'a changé. Même erreur
OriginalL'auteur René Link
Si vous êtes en cours d'exécution d'un test unique, assurez-vous que vous avez écrit votre classe de test correctement le nom
Une erreur commune que je fais, c'est d'avoir une classe nommée " Foo " et une classe de test nommé
et exécuter une seule unité de test avec
au lieu de "FooTest'
Si 'Foo' a un constructeur public avec des arguments, je reçois l'erreur:
Test
à la fin de mon test de l'invocation de la commande.OriginalL'auteur Ezra
J'ai eu une réponse,il corrigé sur ma machine
JUnit4 -> lorsque u vérifier l'exception
pénétrer à l'intérieur de la première exception
il va vérifier votre constructeur n'est-paramètres ou pas
Essayez injection par mutateur ou champ(->champ n'est pas officiellement recommandé)
OriginalL'auteur tyrantqiao
Cette erreur est renvoyée lorsque votre classe n'est pas définie comme public
Dans votre cas, il est abstrait, donc il ne peut pas être instancier pour les tests propouses
OriginalL'auteur María Navarro