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

测试Spring MVC API:未找到合格bean

钱浩荡
2023-03-14

我有以下由Spring MVC API提供的具有单endpointgetAnnotation的结构:

@SpringBootApplication
public class Application {
    @Bean
    public javax.validation.Validator localValidatorFactoryBean() {
        return new LocalValidatorFactoryBean();
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}


@Service
public class MyAnalyzerImpl implements MyAnalyzer
{

    @Autowired
    public MyAnalyzerImpl() {}

    @Override
    public Annotations getAnnotation(MyRequest request)
    {
        // ...
    }
}

接口

public interface MyAnalyzer {
    Annotations getAnnotation(MyRequest request);
}

控制器

@RestController
@RequestMapping("/thisapi/{id}")
public class MyController {

    @Autowired
    @Qualifier("MyAnalysis")
    MyAnalyzer myAnalyzer;

    @RequestMapping(value = "/getAnnotation", method = RequestMethod.GET)
    public Annotations getAnnotation(@PathVariable String docId,
                                     @RequestParam(value = "document", defaultValue = "{'id':'1','title':'bla-bla'}") String text) {
        MysRequest myRequest = new MyRequest(MyRequest.TYPE_ANNOTATION, text);
        return myAnalyzer.getAnnotation(myRequest);
    }
}

为了测试API,我首先创建了src/test/java/myAnalyzerImplTest.java,并且能够成功地执行它:

@RunWith(SpringJUnit4ClassRunner.class)
public class MyAnalyzerImplTest {

    private MyAnalyzerImpl myAnalyzer;
    private String sampleText;

    @Test
    public void testEndpoint() throws Exception {
        MyRequest request = new MyRequest(  MyRequest.TYPE_ANNOTATION,
                                                    "1",
                                                    sampleText
                                                 );
        Annotations results = myAnalyzer.getAnnotation(request);
        Assert.assertTrue("This " + results.getPayload().getWords().size() + ") " +
                "should be greater than 0", results.getPayload().getWords().size() > 0);
    }

    @Before
    public void setUp() throws Exception {
        myAnalyzer = new MyAnalyzerImpl();
        File f = new File("src/test/resources/texsts/text.json");
        if (f.exists()){
            InputStream is = new FileInputStream("src/test/resources/texts/text.json");
            samplePublication = IOUtils.toString(is);
        }
        Thread.sleep(1000);
    }

}
#%RAML 0.8
title: MY API
version: v1
baseUri: http://localhost:8080
resourceTypes:
  - annotate-type:
      description: Bla-bla
      get:
        description: bla-bla
        queryParameters:
          text:
            description: json of a document
            type: string
            required: true
            default: "{'id':'1','title':'bla-bla'}"
        responses:
          200:
            body:
              application/json:
                example: |
                  {
                    "words": "['aaa', 'bbb']"
                  }
/thisapi:
    /{id}/getAnnotation:
        type:
          annotate-type:
        uriParameters:
          id:
            description: document id
            type: string

共有1个答案

闽康安
2023-03-14

正如注释中所讨论的,最初的错误是由于使用了无效的限定符@qualifier(“myanalysis”)。上下文中没有id“myanalysis”的bean。因为只有一个合适的实现,所以使用其他@qualifier是没有用的。

第二个错误是由于在构造函数中无效地使用了@autowired。这里描述了一个类似的问题

 类似资料:
  • 我在这里给我的课做了注解 此外,还对我的测试方法进行了这样的注解 最后,配置我的build.gradle defaultConfig和依赖项,如下所示

  • 我已经看了所有其他对此的反应,但它们似乎不适用于我。 https://kotlinlang.org/api/latest/kotlin.test/kotlin.test/ 我正在尝试从暂存文件或.kt文件访问它,并且它不在下拉列表中以选择它。 项目正在使用JDK 15。

  • 问题内容: 我正在从事Web驱动程序项目。我能够构建测试并执行。 重建解决方案时,我立即遇到以下错误。 我已将默认处理器体系结构更改为,但问题未解决。 请帮助我解决此问题。 谢谢。 问题答案: 似乎是这样的问题:Visual StudioFsUnit测试设置-异常NUnit.Engine.NUnitEngineException因此,安装适配器版本3.0.10应该可以解决您的问题。至少对我有用。

  • 在试图用PHPUnit设置Eclipse作为单元测试库时,我陷入了试图运行一个简单测试用例的困境。作为参考,我按照本教程使用PHPUnit/Xdebug/Makegood来设置Eclipse,唯一偏离给出的指导方针是为PHPUnit/Makegood设置以下配置文件: 现在,问题的根源在于,我似乎无法使用Makegood从Eclipse运行PHPUnit测试。我编写的唯一测试(位于名为test.p

  • 我试图运行一个简单的Spring Boot测试,我得到的错误表明它不能在运行时MockMvc。文档表明我使用了正确的注释,并且我使用start.spring.io创建了我的pom.xml。不知道为什么会有问题。 错误: 测试代码 pom.xml