如何将src/test/javabean包含到任何<;名称>;java使用spring引导方式?

如何将src/test/javabean包含到任何<;名称>;java使用spring引导方式?,java,spring-boot,spring-test,spring-boot-test,Java,Spring Boot,Spring Test,Spring Boot Test,我在src/test/java下给出了这两个类 @RunWith(SpringRunner.class) @SpringBootTest public class ExampleTest { @Autowired private Example example; @Test public void getTwoTest() { assertEquals(new Integer(2), example.getTwo()); } } @TestCompone

我在src/test/java下给出了这两个类

@RunWith(SpringRunner.class)
@SpringBootTest
public class ExampleTest {

@Autowired
private Example example;

   @Test
   public void getTwoTest() {

       assertEquals(new Integer(2), example.getTwo());
   }

}

@TestComponent
public class Example {

   public Integer getTwo(){
       return 2;
   }

}

我读了文件,但仍然有很多问题。当我单击“作为Junit测试运行”时,它会收到一个错误,因为无法自动连接我的bean“示例”。我怎么说SpringBoot也在src/test/java中查找bean呢?我的第二个问题是如何使用另一个application.properties,专用于测试?

查看JavaDoc中的内容如下:

@当bean仅用于测试时可以使用的组件,并且应该从Spring Boot的组件扫描中排除

所以,这个例子不需要连线。我不确定通过测试另一个测试类,您想要实现什么。也许可以尝试将示例放在src/main/java下,并用@Component注释它


至于特定于测试的属性,请查看文档。这样,您就可以在一行或一个单独的文件中使用新值覆盖属性。

查看JavaDoc中的属性说明如下:

@当bean仅用于测试时可以使用的组件,并且应该从Spring Boot的组件扫描中排除

所以,这个例子不需要连线。我不确定通过测试另一个测试类,您想要实现什么。也许可以尝试将示例放在src/main/java下,并用@Component注释它


至于特定于测试的属性,请查看文档。这样,您就可以在一行或一个单独的文件中用新值覆盖属性。

您可以构建一个
配置
类并在那里创建bean

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = ExampleTest.Config.class)
@SpringBootTest
public class ExampleTest {

  @Autowired
  private Example example;

   @Test
   public void getTwoTest() {

       assertEquals(new Integer(2), example.getTwo());
   }

    @Configuration
    @PropertySource("classpath:my.properties")
    @ComponentScan(basePackages = {"my.package"})
    public static Config {
        @Bean
        public Example example() {
            return new Example();
        }
    }

}
不管怎么说,答案表明注释是正确的。您不应该像这样创建bean,或者在主应用程序中创建bean,并使用该注释从应用程序上下文中过滤bean。使用
@TestConfiguration
注释的类也是如此


最后,如果您不需要上下文(即,您有一个单元测试),您根本不需要自动连接bean,您可以使用
@MockBean
@SpyBean

,您可以构建
配置
类并在那里创建bean

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = ExampleTest.Config.class)
@SpringBootTest
public class ExampleTest {

  @Autowired
  private Example example;

   @Test
   public void getTwoTest() {

       assertEquals(new Integer(2), example.getTwo());
   }

    @Configuration
    @PropertySource("classpath:my.properties")
    @ComponentScan(basePackages = {"my.package"})
    public static Config {
        @Bean
        public Example example() {
            return new Example();
        }
    }

}
不管怎么说,答案表明注释是正确的。您不应该像这样创建bean,或者在主应用程序中创建bean,并使用该注释从应用程序上下文中过滤bean。使用
@TestConfiguration
注释的类也是如此


最后,如果您不需要上下文(即,您有一个单元测试),您根本不需要自动连接bean,您可以使用
@MockBean
@SpyBean

我有一个TestDataBuilder,它位于src/test/java中的一个包中,我需要自动连接它……您确实需要自动连接它吗?您在TestDataBuilder中测试什么?是否可以通过新的TestDataBuilder()在测试中直接实例化它(正如@JeanValjean所建议的那样)?是的,我可以做到。但是我怎么能做ExampleTest,把所有的bean都放在src/test/java和src/main/java中呢?@GunterAmorim我觉得你做得有点乱。这是一个开源项目,我们可以看看吗?当你知道如何使用春天的时候,春天就变得很容易:)是的,我同意@JeanValjean。很难说您在这里需要做什么,因为将一个测试类连接到另一个测试类是一件非常不寻常的事情。涵盖了非常彻底的测试方法。如果您正在测试一个类的逻辑(比如您的示例类),通常不需要自动连接它。就照平常一样重新安装吧。如果那个bean也有自动连接的依赖项,那也没关系:这就是为什么最好在构造函数上自动连接,这样你就可以传入依赖项的模拟版本。我有一个TestDataBuilder,它位于src/test/java中的一个包上,我需要自动连接…你确实需要自动连接它吗?您在TestDataBuilder中测试什么?是否可以通过新的TestDataBuilder()在测试中直接实例化它(正如@JeanValjean所建议的那样)?是的,我可以做到。但是我怎么能做ExampleTest,把所有的bean都放在src/test/java和src/main/java中呢?@GunterAmorim我觉得你做得有点乱。这是一个开源项目,我们可以看看吗?当你知道如何使用春天的时候,春天就变得很容易:)是的,我同意@JeanValjean。很难说您在这里需要做什么,因为将一个测试类连接到另一个测试类是一件非常不寻常的事情。涵盖了非常彻底的测试方法。如果您正在测试一个类的逻辑(比如您的示例类),通常不需要自动连接它。就照平常一样重新安装吧。如果那个bean也有自动连接的依赖项,那没关系:这就是为什么最好在构造函数上自动连接,这样你就可以传入依赖项的模拟版本。我有一个TestDataBuilder,它位于src/test/java中的一个包中,我需要自动连接…@gunteramim是的,告诉我们你有什么。你需要一颗豆吗?只需在Config类中返回它,如图所示。你有自动接线豆吗?然后再次使用配置通过构造函数传递bean。我有一个TestDataBuilder,它位于src/test/java中的一个包中,我需要自动连接…@GunterAmorim是的,告诉我们你有什么。你需要一颗豆吗?只需在Config类中返回它,如图所示。你有自动接线豆吗?然后再次使用配置通过构造函数传递bean。