【问题标题】:How to change Java-based configuration in tests for Spring-boot based application?如何在基于 Spring-boot 的应用程序的测试中更改基于 Java 的配置?
【发布时间】:2017-08-26 15:17:56
【问题描述】:

我正试图弄清楚如何以正确的方式测试我的代码,结果卡在了中间的某个地方。

我用什么:

基于 Spring-boot 的 Java Web 应用程序。基于 Java 的配置。测试。

我想要什么:

我想以适当的方式管理我的测试。我有一个 @RestController 带注释的类,它有两个我想在测试中更改的对象。它是一个实体提供者类BooksService 和数据库配置类DBConfig。我想以一种简单而正确的方式在我的测试中更改这些类的实现。我不知道如何正确地做到这一点。

我需要什么样的帮助:

  • 实施此方法的工作项目是最可取的。话不多说,工作代码对我来说是最好的理解方式。
  • 如果那里没有完整的项目,那么带有描述的代码 sn-ps 也会很有用。
  • 链接到一些关于 1) 基于 Java 的配置 2) 替换基于 Java 的测试配置的简单教程。

对不起,如果我的想法有点混乱,我是 Java EE 开发的新手,仍然没有很好地了解所有基本主题。

编辑:

这是一些代码

DemoApplication

@SpringBootApplication
public class DemoApplication {

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

BooksController控制器类

@RestController
public class BooksController {

    @Autowired
    BooksProvider booksProvider;

    @CrossOrigin
    @RequestMapping("/books")
    String allBooks() throws Exception {

        return this.booksProvider.fetchAllBooksAsTring();
    }

}

BooksProvider服务类

public class BooksProvider {

    public String fetchAllBooksAsTring() {
        return "[\"Marting Iden\", \"Capital\", \"Strong Wind\"]";
    }
}

SimpleConfiguration配置类

@Configuration
public class SimpleConfiguration {

    @Bean
    public BooksProvider booksProvider() {
        return new BooksProvider();
    }

}

【问题讨论】:

  • 我认为这是单元测试?您可以为要进行单元测试的类添加代码吗?
  • 嗯,你知道,这不是纯粹的单元测试。这是一种混合单元测试和集成测试。

标签: java testing spring-boot


【解决方案1】:

在 Spring Boot 1.3.x 中我已经成功使用了以下方法:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration({Application.class, IntegrationTestsConfiguration.class})
@ActiveProfiles({"it"})
@DirtiesContext(classMode = AFTER_EACH_TEST_METHOD)
public class MyIT {
    // tests 
}

您可以看到,除了Application.class(带有@SpringBootApplication 注释的那个)之外,@SpringApplicationConfguration 中还有IntergrationTestsConfiguration.class。此类负责覆盖我想要更改的行为以用于测试目的的 bean。

这就是此类的样子:

@Configuration
public class IntegrationTestsConfiguration {

    @Bean
    @Primary
    public BooksProvider booksProvider() {
        // your custom instantiation code goes here
    }
}

换句话说,我使用了“Primary beans 方法”。

自 Spring Boot 1.4.x 以来,@MockBean 注释可用,直到现在我还没有机会使用它,但肯定值得一试。

进一步阅读:

【讨论】:

    【解决方案2】:

    看看 Spring Boot 测试。有一个很好的教程如何测试你的控制器:

    https://spring.io/guides/gs/testing-web/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多