Мне интересно, будет ли у меня какое-то условие гонки, если я буду запускать свои тесты параллельно, а два теста (см. Ниже) передают переменную экземпляра? Поэтому мой тестовый класс работает с SpringJunit4ClassRunner, и у меня есть 2 метода тестов a() и b(), переменная state
будет изменена или переназначена из каждого теста, а doSomethingWithState() будет использовать переменную state
и передать ее на тестирование метод. Я знаю, что с maven-surefire-plugin вы можете запустить его на уровне метода, чтобы и(), и b() были назначены потоку и запускали его параллельно.Состояние гонки при параллельном параллельном тестировании junit
@RunWith(SpringJUnit4ClassRunner.class)
public class TestA {
private Object state;
@Test
public void a() {
stateObjectA();
doSomethingWithState();
assertion();
}
@Test
public void b() {
stateObjectB();
doSomethingWithState();
assertion();
}
private void stateObjectA() {
// do some mocking and setup state
}
private void stateObjectB() {
// do some mocking and setup state
}
private void doSomethingWithState() {
// use the state object and feed into the testing method
}
}
Где находится аннотация '@ Test'? – dit
OOps ... я только что обновил его – peter
Отметив, что [JUnit4 создает новый экземпляр для каждого тестового метода] (http://stackoverflow.com/questions/19381352/does-junit-reinitialize-the-class-with-each-test -method-invocation): у вас есть отдельный экземпляр 'state' для каждого метода, поэтому не будет вмешательства потока. См. Также сообщение в блоге Мартина Фаулера об этом (http://www.martinfowler.com/bliki/JunitNewInstance.html). –