当前位置: 首页 > 知识库问答 >
问题:

@WebMVCtest测试中的ApplicationContext异常

狄誉
2023-03-14

我有一个Spring Boot应用程序(1.5.10.release),其中包含一个主程序(SpringBootApplication)如下所示:

@SpringBootApplication
@Configuration
@EntityScan(basePackages = { "db.modell", "db.modell.base" })
@ComponentScan(basePackages = { "de.gui.test" })
public class SpringBootConsoleApplication {
   public static void main(String[] args) throws Exception {
    SpringApplication.run(SpringBootConsoleApplication.class, args);
  }
}
@RestController
@RequestMapping("/as")
public class AController {
  @Autowired
  private ARepository aRepository;

  @RequestMapping(method = RequestMethod.GET)
  public ResponseEntity<Collection<A>> getAs() {
    return new ResponseEntity<>(orgtFarbeRepository.findAll(), HttpStatus.OK);
  }

  @RequestMapping(value = "/{id}", method = RequestMethod.GET)
  public ResponseEntity<A> getA(@PathVariable long id) {
    A a = ARepository.findOne(id);

    if (party != null) {
      return new ResponseEntity<>(ARepository.findOne(id), HttpStatus.OK);
    } else {
      return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);
    }
  }
}
@RunWith(SpringRunner.class)
@WebMvcTest(AController.class)
public class AControllerTest {

  @Autowired
  private MockMvc mvc;

  @MockBean
  private ARepository ARepository;

  @Test
  public void firstTest() throws Exception {
    A a = new aFarbe();
    a.set....
    when(ARepository.findAll()).thenReturn(Collections.singleton(a));
    mvc.perform(
            get("/as")
            .accept(MediaType.APPLICATION_JSON_UTF8_VALUE)
    )
      .andExpect(status().isOk());
  }
}

存储库如下所示:

public interface ARepository extends CrudRepository<A, Long>
{
    Collection<A> findAll();
}
public interface BRepository extends CrudRepository<B, Long>
{
  Collection<B> findAll();
}

A和B它们本身是JPA注释类。整个应用程序包含对数据库的访问。

此外,我有这样一个服务:

@Service
public class XService {
  private static final Logger LOGGER = LoggerFactory.getLogger(XService.class);

  @Autowired
  private ARepository aRepository;

  @Autowired
  private BRepository bRepository;
...
}

XService不是通过@autowire或其他方式使用的(只需要删除它):

因此,我尝试运行AControllerTest,得到以下错误:

java.lang.IllegalStateException:未能在org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.LoadContext(DefaultCacheAwareContextLoaderDelegate.java:124)...在org.eclipse.jdt.internal.junit.runner.remotetestrunner.main(remotetestrunner.java:206),原因是:org.springframework.beans.factory.unsatisfiedDependencyException:创建名为“xservice”的bean时出错:通过字段“brepository”表示的未满足依赖关系;嵌套异常是org.springframework.beans.factory.nosuchBeanDefinitionException:没有类型为“brepository”的合格bean可用:至少需要1个符合autowire候选的bean。依赖性注释:{@org.springframework.beans.factory.annotation.autowire(required=true)}....在org.springframework.boot.test.context.springbootContextLoader.loadContext(springbootContextLoader.java:120)在org.springframework.test.context.cache.defaultCacheAwareContextLoaderDelegate.loadContextInternal(defaultCacheAwareContextLoaderDelegate.java:98)在brepository'可用:预期至少有1个bean符合autowire候选。Dependency注释:{@org.springframework.beans.factory.annotation.autowire(required=true)}在org.springframework.beans.factory.support.defaultListableBeanFactory.raisenomatchingBeanFound(defaultListableBeanFactory.java:1493)在.java:1066)在org.springframework.beans.factory.annotation.autowiredanNotationBeanPostProcessor$autowiredFieldElement.inject(AutowiredanNotationBeanPostProcessor.java:585)...44多

我的假设是,在测试期间,启动的上下文比应该启动的要多。问题是我如何才能防止这种情况?这意味着只为AControler启动上下文,而不是更多?我认为基于@webmvctest(acontroller.class),它应该已经受到了限制,但看起来并非如此...

共有1个答案

颛孙庆
2023-03-14

引用的答案并没有真正回答我的问题,但在上下文中,一个提示给了我解决方案。因此,这意味着在我的测试中添加以下内容:

所以我必须添加@overrideAutoConfiguration(enabled=true):

@RunWith(SpringRunner.class)
@WebMvcTest(OrgtFarbenController.class)
@OverrideAutoConfiguration(enabled=true)
public class AControllerTest {
...
}
 类似资料:
  • 将@service添加到控制器后,单元测试失败。该项目是Spring-boot V2.0.1版本。我花了很多时间想找到答案,但没有成功。在我添加@service注释之前,测试工作正常,并且我的服务类在其中有一个存储库。 堆栈跟踪: 2018-04-24 12:57:12.487警告940--[main]O.s.w.cs.GenericWebApplicationContext:上下文初始化过程中遇

  • 我想在中测试我的restendpoint。我用编写了一个测试。 这是我在中的方法 现在,当我运行测试时,我得到一个错误 Spring Boot:v2.1.0.发行版 编辑:它起作用了。我怀念我的中的...我删除了这段代码,现在它起作用了

  • 我有这个问题,知道吗?我正在添加洞迹 我的代码如下所示: 我的文件夹目录如下所示: 堆栈跟踪:

  • 在下面的测试类中,我不希望@EnableWebSecurity注释类被Spring上下文捕获: 我正在运行Spring BootV2.2.2版本。 下面是安全配置类:

  • 我有以下简单的类 和以下配置文件 原因:java.lang.ClassNotFoundException:org.springframework.core.annotation.mergedannotations$searchStrategy at java.base/jdk.internal.loader.builtInclassLoader.LoadClass(builtInclassLoad

  • 我试图使用Junit5为特定的服务类创建单元/集成测试,以避免整个项目过载。 测试类: 错误: 2019-04-03 14:56:06.146警告732---[main]O.S.W.C.S.GenericWebApplicationContext:上下文初始化过程中遇到异常-取消刷新尝试:org.springframework.beans.factory.unsatisfiedDependency