Запуск первого теста JCStress
Я новичок в JCStress и пытаюсь запустить "привет мир" для JCStress, но сталкиваюсь с некоторыми проблемами. Я думаю, что есть кое-что очевидное, что я скучаю.
Я иду по этой ссылке, чтобы узнать. И образцы, которые я пробую, здесь.
Я начал с шаблона проекта, созданного из следующего публичного архетипа maven:
mvn archetype:generate "-DinteractiveMode=false" "-DarchetypeGroupId=org.openjdk.jcstress" "-DarchetypeArtifactId=jcstress-java-test-archetype" "-DarchetypeVersion=0.4" "-DgroupId=org.sample" "-DartifactId=test" "-Dversion=1.0"
Я сделал mvn clean install
и получил .\target\jcstress.jar
, я добавил MyConcurrencyTest
который имеет следующий код в пакете org.sample
package org.sample;
import org.openjdk.jcstress.annotations.*;
import org.openjdk.jcstress.infra.results.I_Result;
@JCStressTest
@Outcome(id = "1", expect = Expect.ACCEPTABLE_INTERESTING, desc = "One update lost: atomicity failure.")
@Outcome(id = "2", expect = Expect.ACCEPTABLE, desc = "Actors updated independently.")
@State
public class MyConcurrencyTest {
int v;
@Actor
public void actor1() {
v++;
}
@Actor
public void actor2() {
v++;
}
@Arbiter
public void arbiter(I_Result r) {
r.r1 = v;
}
}
Ниже приведена структура моего проекта:
Теперь я пытаюсь запустить это с помощью этой команды (мой текущий каталог является корневым каталогом проекта, когда я выполняю эту команду)
java -cp ".\target\classes" -jar .\target\jcstress.jar -v -t org.sample.MyConcurrencyTest
Но org.sample.MyConcurrencyTest
не быть казненным.
(Я понимаю, что если мы не укажем тесты, используя -t <testname>
тесты от jcstress.jar/META-INF/TestList
подобраны.) Я думаю, что мне не хватает чего-то очень очевидного. Может кто-нибудь, пожалуйста, помогите?
(Было бы здорово, если бы кто-то мог поделиться хорошим начальным руководством по JCStress, объясняющим его возможности и функциональные возможности, которые у него есть)
2 ответа
Ах, я понял, чего мне не хватало.
Нам нужно сделать mvn clean install
получить MyConcurrencyTest
в META-INF/TestList
файл.
Теперь я могу бежать
java -jar .\target\jcstress.jar -v -t org.sample.MyConcurrencyTest
и мой тест будет выполнен. Если я хочу выполнить все тесты, мне нужно сделать
java -jar .\target\jcstress.jar -v
Вот и все. Бинго!!
Я просто скучал mvn clean install
Я думал, что компиляция классов из Intellij и помещение их в classpath будет работать. Но это не так. Вы должны сообщить платформе JCStress, какие тесты вам нужно выполнить, и для этого вам нужно обязательно выполнить mvn clean install
,
С 2022 года у Intelij IDEA есть плагин https://plugins.jetbrains.com/plugin/19779-jcstress .