1

我在 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“示例”。我怎么说spring boot也要在src/test/java中寻找bean?我的第二个问题是我怎么说使用另一个 application.properties,专门用于测试?

4

2 回答 2

0

查看@TestComponent的JavaDoc它说以下内容:

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

因此,示例不会被连接。我不确定您要通过测试另一个测试类来实现什么。也许尝试将 Example 放在 src/main/java 下并用 @Component 注释它?

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

于 2017-02-08T12:48:16.133 回答
0

你可以建立一个Configuration类并在那里创建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,你可以使用@MockBeanand @SpyBean

于 2017-02-08T12:54:40.173 回答