Запуск первого теста 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 .

Другие вопросы по тегам