les mecs! J'ai une nouvelle question pour vous. J'ajoute des données au cache à l'aide de différents gestionnaires de cache et je suis confronté au problème avec cela. Je le fais en utilisant junit et spring. Lorsque je lance le test, les méthodes de test sont exécutées de manière aléatoire, mais j'ai besoin qu'elles soient exécutées dans l'ordre. Comment faire?? Voici du code et une sortie de console de vérification:
Classe de service:
@Service("HelloCache")
public class CacheServiceImpl implements CacheInterface {
@Autowired
@Qualifier("memcachedClient")
private MemcachedClient mBean;
public void Add(String key, Object object) {
mBean.set(key, 12, object);
}
public void Get(String key) {
mBean.get(key);
}
public void Delete(String key) {
mBean.delete(key);
}
}
Voici le test:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "file:src/main/Java/spring.xml")
public class UsingMemcachedTest extends TestCase {
@Autowired
@Qualifier("HelloCache")
private CacheInterface emcached;
private byte[][] i = new byte[2500][3000];
private String key = "j";
@Test
public void testAddBulkObjects() {
System.out.println("");
System.out.println("This is async BULK adding test");
long time = System.currentTimeMillis();
for (int k=1; k<=1000; k++) {
emcached.Add(key+k, i);
}
long time2 = System.currentTimeMillis();
long timeE=time2-time;
System.out.println("Vremya add BULK objects: " + timeE);
System.out.println("");
}
@Test
public void testGetBulkObjects() {
System.out.println("");
System.out.println("This is getting BULK objects test");
long time = System.currentTimeMillis();
for (int k=1; k<=1000; k++) {
emcached.Get(key+k);
}
long time2 = System.currentTimeMillis();
long timeE=time2-time;
System.out.println("Vremya Get object: " + timeE);
System.out.println("");
}
@Test
public void testDeleteBulkObjects() {
System.out.println("");
System.out.println("This is deleting BULK objects test");
long time = System.currentTimeMillis();
for (int k=1; k<=1000; k++) {
emcached.Delete(key+k);
}
long time2 = System.currentTimeMillis();
long timeE=time2-time;
System.out.println("Vremya delete object: " + timeE);
System.out.println("");
}
Et la sortie:
This is deleting BULK objects test
Vremya delete object: 137
This is getting BULK objects test
Vremya Get object: 703
This is async BULK adding test
Vremya add BULK objects: 87681
S'il vous plaît, AIDEZ !! =)
JUnit ne fait aucune promesse concernant l'ordre dans lequel vos tests sont exécutés. L'ordre SERA différent selon l'environnement et le contexte dans lequel les tests sont exécutés.
Pour cette raison (et d'autres), il est considéré comme une très mauvaise conception de test pour que l'ordre affecte le comportement de vos tests. Vous pouvez utiliser @Avant d'aller vous donner une table rase pour travailler, puis faire n'importe quelle configuration pour un test particulier dans le cadre de ce test.
La réponse acceptée à la question suivante donne une bonne explication et des liens vers des ressources utiles: Comment exécuter les méthodes de test dans un ordre spécifique dans JUnit4?
À partir de la version 4.11, vous pouvez spécifier l'ordre d'exécution à l'aide d'annotations et de classement par nom de méthode:
import org.junit.Test;
import org.junit.FixMethodOrder;
import org.junit.runners.MethodSorters;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MyTest {
@Test
public void test1Create() {
System.out.println("first");
}
@Test
public void test2Update() {
System.out.println("second");
}
}
JUnit 4.11 a ajouté des trucs sympas qui vous permettent de contrôler Test Execution Order