Как сделать методы запуска junit в порядке
ребята! У меня есть новый вопрос для вас. Я добавляю некоторые данные для кэширования с использованием разных менеджеров кэша, и я столкнулся с проблемой с ним. Я делаю это с помощью junit и spring. Когда я запускаю тест, методы тестирования выполняются случайным образом, но мне нужно, чтобы они выполнялись по порядку. Как это сделать?? Ниже приведен код и вывод на консоль:
Класс обслуживания:
@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);
}
}
Вот тест:
@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("");
}
И вывод:
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
Пожалуйста, ПОМОГИТЕ! =)
Ответы
Ответ 1
JUnit не делает promises в отношении порядка выполнения ваших тестов. Порядок будет отличаться в зависимости от среды и контекста, в котором выполняются тесты.
По этой причине (и другим) это считается очень плохой тестовой конструкцией для заказа, чтобы повлиять на поведение ваших тестов. Вы можете использовать @Before, чтобы дать вам чистый сланец для работы с ним, а затем выполнить любую настройку для конкретного теста в рамках этого теста.
Принятый ответ на следующий вопрос дает хорошее объяснение и ссылки на некоторые полезные ресурсы: Как запустить тестовые методы в определенном порядке в JUnit4?
Ответ 2
В версии 4.11 вы можете указать порядок выполнения, используя аннотации и упорядочение по имени метода:
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
Ответ 3
JUnit 4.11 добавил несколько полезных вещей, которые позволяют вам контролировать Пример выполнения тестирования