@Configuration
public class CacheConfiguration {
private static final String CONFIG= "Configuration";
@Value("${redis.server.url}")
private String redisUrl;
@Value("${redis.server.password}")
private String password;
@Bean
public RedissonClient redissonClient() {
Config config = new Config();
config.useSingleServer().setAddress(redisUrl).setPassword(password);
RedissonClient client = Redisson.create(config);
return client;
}
@Bean
public CacheManager redissonCacheManager(RedissonClient redissonClient) {
Map<String, CacheConfig> config = new HashMap<String, CacheConfig>();
config.put(CONFIG, new CacheConfig(24*60*1000, 12*60*1000));
return new RedissonSpringCacheManager(redissonClient, config);
}
}
我认为您应该意识到,用@configuration
注释的类并不是真正的java类,或者至少您不应该这样对待它们。我知道这听起来很有争议,我会解释的...
因此,历史上spring使用XML配置来声明bean。
我想在Spring2.5中,他们引入了一种基于注释的方法,在这种方法中,您将注释@component
/@service
放在类上,将@autowired
放在希望spring注入依赖项的任何地方,然后spring启动,扫描类路径,检测bean,并用这些bean启动应用程序上下文。
因此,您应该将这些配置类视为我之前描述的方法的“替代”
现在让我问一下,您认为您应该测试和XML bean配置本身吗?可能不是...你认为你应该测试这个类上有注释@component
,并且所有必要的依赖都是autowired(带有反射或其他)吗?可能不会。
那么,为什么要测试Java配置类呢?
不要假设我们有三个bean:A、B、C,比如B和C依赖于A。
class A {}
class B {
private A a;
public B(A a) {this.a = a;}
}
class C {
private A a;
public C(A a) {this.a = a;}
}
所有bean都应该是单例的,所以我们这样定义配置:
@Configuration
public class MyConfig {
@Bean
public A a() { return new A(); }
@Bean
public B b() { return new B(a()); }
public C c() {return new C(a()); }
}
请注意,我们在B
和C
的定义中调用a()
现在,让我问您一个问题:如果它是一个“常规”java代码,那么方法a()
的两个不同调用(在B和C的构造函数中)如何分别返回a
的同一个实例?
我相信还有更多类似的参数,但要点很清楚--不要单独测试配置类。
相反,您可以使用集成测试来运行spring容器并加载配置中所需的所有类。但是,在这种情况下,您可能希望模拟一些类(例如使用@mockbean
),这样就不会是一个100%准确的测试。
在代码覆盖率方面,IMO应该将这些类完全排除在覆盖率之外
我在SpringBoot中开发微服务。为服务和DAO层编写单元测试。当我使用@SpringBootTest时,它会在构建时启动应用程序。但是当我运行单元测试时,它不应该启动应用程序。我使用了@runwith(Springrunner.class),但无法在junit类中使用@autowired类实例。如何配置不应该启动应用程序的junit测试类,以及如何在junit类中@Autowired类实例。
我想配置一个Spring Boot应用程序,以便根本不使用DB。因此,我对应用程序类进行了注释,以排除JPA自动配置类: 原因:org.springframework.beans.factory.BeanCreationException:创建名为“data source”的bean时出错:调用init方法失败;嵌套异常是java.lang.IllegalStateException:无法为测试确
我想为上面的内容编写单元测试,以测试我正在使用的注释的sampleURL,比如如果我给出任何应该与regex模式匹配的URL。我浏览了以下链接:如何在spring中进行单元测试验证注释,如何使用JUnit测试类的验证注释?但它们没有多大帮助,我也有setSampleURL函数。那么,如何为sampleURL变量编写测试呢。基本上,我想为regex模式编写测试,即我给sampleURL的值是否与re
在尝试连接数据库并获得连接尝试失败时,所有这些测试用例都失败了。和异常,因为它没有获取信息。 我对spring boot framework和JUnit几乎是新手,希望帮助我理解这一点以及编写单元测试用例的正确方法。
我有一个处理jwt创建的类: 并从resources文件夹中的属性文件中获取jwtSecret和jwtExpirationInMs。 我的单元测试如下所示:
我一直在学习使用Jest库编写JavaScript/TypeScript代码的单元测试。下面是一个我不知道如何处理的例子。它是用TypeScript输入的——只有两个公共方法和一个构造函数需要service1参数。 我想我需要测试两种情况: > 如果 函数为空。我没有在代码中看到它的任何实现,也不知道它是如何工作的。我应该把它作为参数传递给这个类的实例吗? 我很困惑,在这个特定的例子中,我应该使用