Answer the question
In order to leave comments, you need to log in
How to fix java.lang.IllegalStateException: Failed to load ApplicationContext error?
Hello!
I started to study spring and there was a problem with running the test.
There were many questions on this topic on the Internet, but no matter what I change, nothing helps from the suggestions.
UserSeviceTest class:
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserSeviceTest {
@Autowired
private UserSevice userSevice;
@MockBean
private UserRepo userRepo;
@MockBean
private MailSender mailSender;
@MockBean
private PasswordEncoder passwordEncoder;
@Test
public void addUser() {
User user = new User();
user.setEmail("[email protected]");
boolean isUserCreated = userSevice.addUser(user);
Assert.assertTrue(isUserCreated);
Assert.assertNotNull(user.getActivationCode());
Assert.assertTrue(CoreMatchers.is(user.getRoles()).matches(Collections.singleton(Role.USER)));
Mockito.verify(userRepo, Mockito.times(1)).save(user);
Mockito.verify(mailSender, Mockito.times(1))
.send(
ArgumentMatchers.eq(user.getEmail()),
ArgumentMatchers.anyString(),
ArgumentMatchers.anyString()
);
}
@Test
public void addUserFailTest() {
User user = new User();
user.setUsername("John");
Mockito.doReturn(new User())
.when(userRepo)
.findByUsername("John");
boolean isUserCreated = userSevice.addUser(user);
Assert.assertFalse(isUserCreated);
Mockito.verify(userRepo, Mockito.times(0)).save(ArgumentMatchers.any(User.class));
Mockito.verify(mailSender, Mockito.times(0))
.send(
ArgumentMatchers.anyString(),
ArgumentMatchers.anyString(),
ArgumentMatchers.anyString()
);
}
@Test
public void activateUser() {
User user = new User();
user.setActivationCode("bingo!");
Mockito.doReturn(user)
.when(userRepo)
.findByActivationCode("activate");
boolean isUserActivated = userSevice.activateUser("activate");
Assert.assertTrue(isUserActivated);
Assert.assertNull(user.getActivationCode());
Mockito.verify(userRepo, Mockito.times(1)).save(user);
}
@Test
public void activateUserFailTest() {
boolean isUserActivated = userSevice.activateUser("activate me");
Assert.assertFalse(isUserActivated);
Mockito.verify(userRepo, Mockito.times(0)).save(ArgumentMatchers.any(User.class));
}
}
/*
* Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package java.lang;
/**
* Signals that a method has been invoked at an illegal or
* inappropriate time. In other words, the Java environment or
* Java application is not in an appropriate state for the requested
* operation.
*
* @author Jonni Kanerva
* @since 1.1
*/
public class IllegalStateException extends RuntimeException {
/**
* Constructs an IllegalStateException with no detail message.
* A detail message is a String that describes this particular exception.
*/
public IllegalStateException() {
super();
}
/**
* Constructs an IllegalStateException with the specified detail
* message. A detail message is a String that describes this particular
* exception.
*
* @param s the String that contains a detailed message
*/
public IllegalStateException(String s) {
super(s);
}
/**
* Constructs a new exception with the specified detail message and
* cause.
*
* <p>Note that the detail message associated with {@code cause} is
* <i>not</i> automatically incorporated in this exception's detail
* message.
*
* @param message the detail message (which is saved for later retrieval
* by the {@link Throwable#getMessage()} method).
* @param cause the cause (which is saved for later retrieval by the
* {@link Throwable#getCause()} method). (A {@code null} value
* is permitted, and indicates that the cause is nonexistent or
* unknown.)
* @since 1.5
*/
public IllegalStateException(String message, Throwable cause) {
super(message, cause);
}
/**
* Constructs a new exception with the specified cause and a detail
* message of {@code (cause==null ? null : cause.toString())} (which
* typically contains the class and detail message of {@code cause}).
* This constructor is useful for exceptions that are little more than
* wrappers for other throwables (for example, {@link
* java.security.PrivilegedActionException}).
*
* @param cause the cause (which is saved for later retrieval by the
* {@link Throwable#getCause()} method). (A {@code null} value is
* permitted, and indicates that the cause is nonexistent or
* unknown.)
* @since 1.5
*/
public IllegalStateException(Throwable cause) {
super(cause);
}
@java.io.Serial
static final long serialVersionUID = -1848914673093119416L;
}
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:107)
at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:242)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)
Caused by: java.lang.IllegalStateException: Cannot load configuration class: com.example.sweater.Application
Answer the question
In order to leave comments, you need to log in
the listing of the IllegalStateException class is definitely superfluous
here, but the stacktrace needs to be looked at more carefully
, it seems that it lacks a configuration here. How does Spring know what UserRepo, UserService, etc. are?
for study: https://www.baeldung.com/spring-boot-testing
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question