如何使用spring boot方式将src / test / java bean包含到任何<name> Test.java中?

时间:2017-02-08 12:40:13

标签: java spring-boot spring-test spring-boot-test

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

func getCountryFromDB(_ fetchOffSet: Int) -> [Any] {
    var record = [Any]() /* capacity: 0 */
    var context: NSManagedObjectContext? = self.getManagedObjectContext()
    var fetchRequest = NSFetchRequest()
    self.fetchRequest.fetchLimit = 10
    self.fetchRequest.fetchOffset = fetchOffSet
    var entityDesc = NSEntityDescription.entity(forEntityName: "Country", in: self.context)
    self.fetchRequest.entity = self.entityDesc
    var error: Error?
    var fetchedOjects: [Any]? = try? self.context.fetch(self.fetchRequest)
    for i in 0..<self.fetchedOjects.count {
        var country: Country? = self.fetchedOjects[i]
        self.record.append(self.country)
    }
    return self.record
}

 func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
        // UITableView only moves in one direction, y axis
    var currentOffset: CGFloat = scrollView.contentOffset.y
    var maximumOffset: CGFloat = scrollView.contentSize.height - scrollView.frame.size.height
    // Change 50.0 to adjust the distance from bottom
    if maximumOffset - currentOffset <= 50.0 {
        if self.yourCoreDataRecordArray.count > 10 {
            fetchOffSet = fetchOffSet + 10
            var array: [Any] = self.getCountryFromDB(fetchOffSet)
        }
    }
}

我阅读了文档,但仍然有很多问题。当我点击“运行为Junit测试”时,它会收到一个错误,因为无法自动装配我的bean“示例”。我如何说弹簧启动在src / test / java中寻找bean呢?我的第二个问题是如何使用另一个application.properties,专用于测试?

2 个答案:

答案 0 :(得分:0)

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

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

所以,示例不会被连线。我不确定你是通过测试另一个测试类来实现的。也许尝试将示例放在src / main / java下并使用@Component注释它?

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

答案 1 :(得分: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();
        }
    }

}

无论如何,this回答说正确的注释。您不应该像这样创建bean,或者在主应用程序中创建bean并使用该批注从应用程序上下文中过滤掉bean。使用@TestConfiguration注释的类也是如此。

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