gpt4 book ai didi

java - memcached 测试未按预期运行

转载 作者:行者123 更新时间:2023-12-01 13:00:17 26 4
gpt4 key购买 nike

我正在实现 https://code.google.com/p/simple-spring-memcached/当我运行下面的代码时,我收到以下输出:

Adding to cache
Adding to cache

测试 memcached 的代码:

import java.util.ArrayList;
import java.util.List;

import junit.framework.Assert;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.google.code.ssm.CacheFactory;
import com.google.code.ssm.api.ParameterValueKeyProvider;
import com.google.code.ssm.api.ReadThroughSingleCache;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:memcached-context.xml" })
public class MemcachedTest {

@Test
public void testMemcached() {
Assert.assertTrue(getComplexObjectFromDB("test").size() == 1);
Assert.assertTrue(getComplexObjectFromDB("test").size() == 1);
}

private List<String> getSA(){

List<String> l = new ArrayList<String>();
System.out.println("Adding to cache");
l.add("test");

return l;
}

@ReadThroughSingleCache(namespace = "CplxObj", expiration = 3600)
public List<String> getComplexObjectFromDB(@ParameterValueKeyProvider String id) {

return getSA();
}

@Autowired
private CacheFactory defaultMemcachedClient;

}

memcached-context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:oxm="http://www.springframework.org/schema/oxm"
xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"
xsi:schemaLocation="
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.1.xsd
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<mvc:annotation-driven />

<context:annotation-config />

<import resource="simplesm-context.xml" />
<aop:aspectj-autoproxy />

<bean name="defaultMemcachedClient" class="com.google.code.ssm.CacheFactory">
<property name="cacheClientFactory">
<bean class="com.google.code.ssm.providers.xmemcached.MemcacheClientFactoryImpl" />
</property>
<property name="addressProvider">
<bean class="com.google.code.ssm.config.DefaultAddressProvider">
<property name="address" value="xx.xx.xx.xx:11211" />
</bean>
</property>
<property name="configuration">
<bean class="com.google.code.ssm.providers.CacheConfiguration">
<property name="consistentHashing" value="true" />
</bean>
</property>
</bean>

</beans>

我希望只接收一次输出“添加到缓存”,因为一旦将缓存添加到列表中就应该返回并且列表不应该被重新实例化?我的实现正确吗?

更新:

根据@raznor的建议,这似乎表现符合预期:

memcached-context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:oxm="http://www.springframework.org/schema/oxm"
xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"
xsi:schemaLocation="
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.1.xsd
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<mvc:annotation-driven />

<context:annotation-config />

<import resource="simplesm-context.xml" />
<aop:aspectj-autoproxy />

<bean name="memcachedClient" class="com.memcached.MemcachedClient">
</bean>

<bean name="defaultMemcachedClient" class="com.google.code.ssm.CacheFactory">
<property name="cacheClientFactory">
<bean class="com.google.code.ssm.providers.xmemcached.MemcacheClientFactoryImpl" />
</property>
<property name="addressProvider">
<bean class="com.google.code.ssm.config.DefaultAddressProvider">
<property name="address" value="1.1.1.1:11211" />
</bean>
</property>
<property name="configuration">
<bean class="com.google.code.ssm.providers.CacheConfiguration">
<property name="consistentHashing" value="true" />
</bean>
</property>
</bean>

</beans>

MemcachedTest.java:

import java.util.ArrayList;
import java.util.List;

import junit.framework.Assert;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.google.code.ssm.CacheFactory;
import com.google.code.ssm.api.ParameterValueKeyProvider;
import com.google.code.ssm.api.ReadThroughSingleCache;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:memcached-context.xml" })
public class MemcachedTest {

@Test
public void testMemcached() {

Assert.assertTrue(mClient.getComplexObjectFromDB("test1").size() == 1);
Assert.assertTrue(mClient.getComplexObjectFromDB("test1").size() == 1);
}

@Autowired
private MemcachedClient mClient;

}

MemcachedClient.java:

package com.memcached;

import java.util.ArrayList;
import java.util.List;

import com.google.code.ssm.api.ParameterValueKeyProvider;
import com.google.code.ssm.api.ReadThroughSingleCache;

public class MemcachedClient {

@ReadThroughSingleCache(namespace = "CplxObj", expiration = 3600)
public List<String> getComplexObjectFromDB(
@ParameterValueKeyProvider String id) {

return getSA();
}

private List<String> getSA() {

List<String> l = new ArrayList<String>();
System.out.println("Adding to cache");
l.add("test");

return l;
}

}

最佳答案

它不起作用,因为 self 调用未被拦截。为了使其工作,将 getComplexObjectFromDB 方法提取到单独的 Spring bean 中,并使用此 bean 在测试中调用它:myBean.getComplexObjectFromDB。

关于java - memcached 测试未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23567680/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com