Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JUnit测试中强制执行模拟自动连接字段的重写方法?_Java_Spring Boot_Junit_Spring Test - Fatal编程技术网

Java 如何在JUnit测试中强制执行模拟自动连接字段的重写方法?

Java 如何在JUnit测试中强制执行模拟自动连接字段的重写方法?,java,spring-boot,junit,spring-test,Java,Spring Boot,Junit,Spring Test,我有一个CacheInterceptor类,它扩展了HandlerInterceptorAdapter。此类具有自动连线缓存: // CacheInterceptor.java public class CacheInterceptor extends HandlerInterceptorAdapter { @Autowired private Cache<String, String> myCache; ... } //CacheInterceptor

我有一个CacheInterceptor类,它扩展了HandlerInterceptorAdapter。此类具有自动连线缓存:

// CacheInterceptor.java
public class CacheInterceptor extends HandlerInterceptorAdapter {

    @Autowired
    private Cache<String, String> myCache;

    ...
}
//CacheInterceptor.java
公共类CacheInterceptor扩展了HandlerInterceptorAdapter{
@自动连线
私有缓存myCache;
...
}
此bean定义发生在CachingConfiguration类中。在这个类中,由于项目需要额外的行为,我正在重写缓存写方法

// CachingConfiguration.java
public class CachingConfiguration {

    @Bean(name = "myCache")
    public Cache<String, String> getMyCache() {
        ...

        CacheWriter<String, String> writer = new CacheWriter<String, String>() {

            @Override
            public void write(String key, String value) throws Exception {
                object.persist();
                ...
            }
    }
}
//CachingConfiguration.java
公共类caching配置{
@Bean(name=“myCache”)
公共缓存getMyCache(){
...
CacheWriter=新的CacheWriter(){
@凌驾
公共无效写入(字符串键、字符串值)引发异常{
object.persist();
...
}
}
}
然后我有一个CacheInterceptorTest类,我在其中模拟我的缓存,因为在某些情况下,我需要强制返回值

// CacheInterceptorTest.java
@ContextConfiguration(classes = {
        CachingConfiguration.class
})

public class CacheInterceptorTest {

    @MockBean
    private Cache<String, String> myCache;
}
//CacheInterceptorTest.java
@上下文配置(类={
CachingConfiguration.class
})
公共类CacheInterceptorTest{
@蚕豆
私有缓存myCache;
}
这适用于我的大多数测试。但是,有一个特定的测试需要在将值放入缓存时调用getMyCache中的
write()
方法。但是因为我在模拟它,所以它使用了Cache.write()的原始实现


如何实现这一点?

模拟是一个独立的实现,它没有覆盖方法,因此无法“强制”任何内容

根据您希望在测试中实现的目标,可能会有不同的解决方案


简单的解决方案可以是在junit测试中使用真实缓存,或者使用始终对真实存储进行读写操作的虚拟(非模拟)缓存。

也许您想描述什么测试需要这种行为以及为什么。