请容忍我,因为这是我第一次使用Spring靴,所以这只是我认为正在发生的事情。。。
我有两个方法,都是用Scheduled注释的。它们工作得很好,我已经配置并注入了所有依赖项。这些依赖关系非常重,依赖于internet连接等。我将它们注释为懒惰,因此它们只是在最后一刻才实例化。
但是,包含计划方法的类需要标记为组件,这意味着它们是在启动时创建的。这引发了一个连锁反应,它会创建我的所有依赖项,无论我在当前运行的测试中是否真的需要它们。
当我在我们的CI服务器上运行我的单元测试时,它们会失败,因为服务器不与数据库认证(也不应该认证)。
测试这些计划作业的测试注入了它们自己的模拟,因此它们工作正常。然而,完全不相关的测试导致了问题,因为类仍然是创建的。显然,我不想在这些测试中为完全无关的类创建mock。
如何防止在测试运行时创建特定组件?
计划工作类别:
package example.scheduledtasks;
@Component
public class ScheduledJob {
private Database database;
@Autowired
public AccountsImporter(Database database) {
this.database = database;
}
@Scheduled(cron="0 0 04 * * *")
public void run() {
// Do something with the database
}
}
配置类:
package example
@Configuration
public class ApplicationConfig {
@Bean
@Lazy
public Database database() {
return ...;// Some heavy operation I don't want to do while testing.
}
}
只需将以下内容添加到测试类中:
@MockBean
public Database d;
我知道你说过:
显然,我不想在这些测试中为完全无关的类创建mock。
不过,正如您所知,您可以轻松地覆盖不需要的组件,仅用于此测试:
@RunWith(...)
@Context...
public class YourTest {
public static class TestConfiguration {
@Bean
@Primary
public Database unwantedComponent(){
return Mockito.mock(Database.class);
}
}
@Test
public void yourTest(){
...
}
}
类似的问题/答案:在每个spring boot@测试中重写单个@配置类
需要对项目的控制器部分进行单元测试,但却得到了错误。我相信ModelAndVIew部分导致了这个问题,尽管我曾经嘲弄过它并返回ModelAndVIew,因为它是方法的返回类型。然而,它并不起作用。pom.xml没有任何问题,因此没有添加它。ProjectController: java.lang.IllegalStateException:找不到@SpringBootConfiguration,您
我有一个在命令行上运行的springboot 2应用程序。命令行参数之一是命名中带有batchNo的fileName。我正在使用命令行参数中的fileName设置我application.properties的fileName值。示例 在我的应用程序配置文件中,我像这样从applications.properties文件中读取文件名。 我的目标是能够为每个单独的测试动态设置这个文件名。 示例 如何
我想测试我的SpringBoot应用程序,它使用cassandra作为CrudRepository。我最终得到了 具有 和 这就导致了 如果我使用旧版本的cassandra-unit-Spring 它以NullPointerException结束,因为没有注入值repo。 来源https://github.com/StephanPraetsch/spring.boot.cassandra.unit
我要从Thorntail搬到Quarkus。在我的测试中,我曾创建一个@deployment方法,在该方法中,我只放置测试所需的内容。特别是,我没有把一个类放在@Startup注释中(因为我不想测试它…)。当我移动到QUARKUS时,我抑制了de@deployment静态方法,然后当我启动测试时@Startup是。。。一开始,发生了很多不好的事情,阻止我测试我想要测试的东西(好吧,它崩溃了,因为它
我在单元测试中使用了Moq框架。这是UpdateApplication测试方法: 我在运行测试时遇到一个异常: 我应该如何编写使用Moq更新和删除操作的单元测试?
问题内容: 我编写了一个测试UsersController的单元测试。UsersControllerTest.findUser工作正常,但不能正常运行UsersControllerTest.insertGetModifyDelete。 在测试日志中,我可以看到POST请求与UsersController的任何方法都不匹配,但是我不明白为什么。您能帮我这个吗? 这是我其余的Java类: 我有2种方法